use strut_factory::Deserialize as StrutDeserialize;
use tracing_core::LevelFilter as TracingLevelFilter;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, StrutDeserialize)]
#[strut(eq_fn = strut_deserialize::Slug::eq_as_slugs)]
pub enum Verbosity {
#[strut(alias = "no")]
Off,
#[strut(alias = "err")]
Error,
#[strut(alias = "warning")]
Warn,
Info,
Debug,
Trace,
}
impl Default for Verbosity {
fn default() -> Self {
Self::Info
}
}
impl Verbosity {
pub fn to_tracing_level_filter(&self) -> TracingLevelFilter {
match self {
Self::Off => TracingLevelFilter::OFF,
Self::Error => TracingLevelFilter::ERROR,
Self::Warn => TracingLevelFilter::WARN,
Self::Info => TracingLevelFilter::INFO,
Self::Debug => TracingLevelFilter::DEBUG,
Self::Trace => TracingLevelFilter::TRACE,
}
}
}
impl From<Verbosity> for TracingLevelFilter {
fn from(value: Verbosity) -> Self {
value.to_tracing_level_filter()
}
}
impl From<&Verbosity> for TracingLevelFilter {
fn from(value: &Verbosity) -> Self {
value.to_tracing_level_filter()
}
}