si_observability/
clap4.rs

1//! CLI arguments for [`clap`] (version 4).
2
3use clap4 as clap;
4use tracing::level_filters::LevelFilter;
5
6use crate::sealed::ConfigurationSealed;
7use crate::{Configuration, StderrLogFormat};
8
9/// Logging CLI arguments.
10#[derive(Debug, Clone, clap::Parser)]
11pub struct LoggingArgs {
12    /// Log format.
13    #[clap(long)]
14    log_format: Option<LogFormatArg>,
15    /// Log level.
16    #[clap(long)]
17    log_level: Option<LogLevelArg>,
18}
19
20impl ConfigurationSealed for LoggingArgs {}
21
22impl Configuration for LoggingArgs {
23    fn apply_to(&self, initializer: &mut crate::Initializer) {
24        if let Some(log_format) = &self.log_format {
25            initializer.stderr_logging_format = Some(match log_format {
26                LogFormatArg::Compact => StderrLogFormat::Compact,
27                LogFormatArg::Full => StderrLogFormat::Full,
28            })
29        }
30        if let Some(log_level) = &self.log_level {
31            initializer.stderr_default_level = match log_level {
32                LogLevelArg::Off => LevelFilter::OFF,
33                LogLevelArg::Error => LevelFilter::ERROR,
34                LogLevelArg::Warn => LevelFilter::WARN,
35                LogLevelArg::Info => LevelFilter::INFO,
36                LogLevelArg::Debug => LevelFilter::DEBUG,
37                LogLevelArg::Trace => LevelFilter::TRACE,
38            };
39        }
40    }
41}
42
43/// Log format argument.
44#[derive(Debug, Clone, clap::ValueEnum)]
45enum LogFormatArg {
46    /// Compact log format.
47    Compact,
48    /// Full log format.
49    Full,
50}
51
52/// Log level argument.
53#[derive(Debug, Clone, clap::ValueEnum)]
54enum LogLevelArg {
55    /// Turn logging off.
56    Off,
57    /// “Error” log level.
58    Error,
59    /// “Warn” log level.
60    Warn,
61    /// “Info” log level.
62    Info,
63    /// “Debug” log level.
64    Debug,
65    /// “Trace” log level.
66    Trace,
67}