Skip to main content

faucet_cli/commands/
mod.rs

1//! Subcommand implementations. Each module owns its `run(...)` entry point
2//! and stays free of clap so the integration tests can drive it directly.
3
4pub mod backfill;
5#[cfg(feature = "catalog")]
6pub mod catalog;
7pub mod conformance;
8#[cfg(feature = "contract")]
9pub mod contract;
10#[cfg(feature = "cli-dev")]
11pub mod dev;
12pub mod discover;
13pub mod dlq;
14pub mod doctor;
15pub mod init;
16pub mod install;
17pub mod list;
18#[cfg(feature = "masking")]
19pub mod masking;
20pub mod new;
21#[cfg(feature = "notify")]
22pub mod notify;
23pub mod plan;
24pub mod preview;
25pub mod replicate;
26pub mod run;
27#[cfg(feature = "schedule")]
28pub mod schedule;
29pub mod schema;
30pub mod search;
31#[cfg(feature = "serve")]
32pub mod serve;
33pub mod test;
34pub mod validate;
35
36use crate::error::CliError;
37
38/// Render any [`CliError`] to a single line on stderr, scrubbing any resolved
39/// secret values that may have reached the error chain.
40pub fn report(err: &CliError) {
41    use crate::secrets::registry::redact;
42    eprintln!("error: {}", redact(&err.to_string()));
43    let mut src = std::error::Error::source(err);
44    while let Some(s) = src {
45        eprintln!("  caused by: {}", redact(&s.to_string()));
46        src = std::error::Error::source(s);
47    }
48}