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 completions;
8pub mod conformance;
9#[cfg(feature = "contract")]
10pub mod contract;
11#[cfg(feature = "cli-dev")]
12pub mod dev;
13pub mod discover;
14pub mod dlq;
15pub mod doctor;
16pub mod explain;
17pub mod fmt;
18#[cfg(feature = "catalog")]
19pub mod history;
20pub mod init;
21pub mod install;
22pub mod list;
23#[cfg(feature = "masking")]
24pub mod masking;
25pub mod migrate;
26pub mod new;
27#[cfg(feature = "notify")]
28pub mod notify;
29pub mod plan;
30pub mod preview;
31pub mod replicate;
32pub mod run;
33#[cfg(feature = "schedule")]
34pub mod schedule;
35pub mod schema;
36pub mod search;
37#[cfg(feature = "serve")]
38pub mod serve;
39pub mod test;
40pub mod validate;
41
42use crate::error::CliError;
43
44/// Render any [`CliError`] to a single line on stderr, scrubbing any resolved
45/// secret values that may have reached the error chain.
46pub fn report(err: &CliError) {
47    use crate::secrets::registry::redact;
48    eprintln!("error: {}", redact(&err.to_string()));
49    let mut src = std::error::Error::source(err);
50    while let Some(s) = src {
51        eprintln!("  caused by: {}", redact(&s.to_string()));
52        src = std::error::Error::source(s);
53    }
54}