// These re-exports of the tracing crate types it easy to use this crate without having to depend on // the tracing crate directly. See for // more information. pub use tracing_core::{Level, LevelFilter}; use crate::{LogLevel, Verbosity, VerbosityFilter}; impl From for LevelFilter { fn from(filter: VerbosityFilter) -> Self { match filter { VerbosityFilter::Off => LevelFilter::OFF, VerbosityFilter::Error => LevelFilter::ERROR, VerbosityFilter::Warn => LevelFilter::WARN, VerbosityFilter::Info => LevelFilter::INFO, VerbosityFilter::Debug => LevelFilter::DEBUG, VerbosityFilter::Trace => LevelFilter::TRACE, } } } impl From for VerbosityFilter { fn from(level: LevelFilter) -> Self { match level { LevelFilter::OFF => Self::Off, LevelFilter::ERROR => Self::Error, LevelFilter::WARN => Self::Warn, LevelFilter::INFO => Self::Info, LevelFilter::DEBUG => Self::Debug, LevelFilter::TRACE => Self::Trace, } } } impl From for Option { fn from(filter: VerbosityFilter) -> Self { match filter { VerbosityFilter::Off => None, VerbosityFilter::Error => Some(Level::ERROR), VerbosityFilter::Warn => Some(Level::WARN), VerbosityFilter::Info => Some(Level::INFO), VerbosityFilter::Debug => Some(Level::DEBUG), VerbosityFilter::Trace => Some(Level::TRACE), } } } impl From> for VerbosityFilter { fn from(level: Option) -> Self { match level { None => Self::Off, Some(Level::ERROR) => Self::Error, Some(Level::WARN) => Self::Warn, Some(Level::INFO) => Self::Info, Some(Level::DEBUG) => Self::Debug, Some(Level::TRACE) => Self::Trace, } } } impl From> for LevelFilter { fn from(v: Verbosity) -> Self { v.tracing_level_filter() } } impl From> for Option { fn from(v: Verbosity) -> Self { v.tracing_level() } } #[cfg(test)] mod tests { use super::*; use crate::{DebugLevel, ErrorLevel, InfoLevel, OffLevel, TraceLevel, Verbosity, WarnLevel}; #[test] fn tracing_level() { let v = Verbosity::::default(); assert_eq!(v.tracing_level(), None); assert_eq!(v.tracing_level_filter(), LevelFilter::OFF); let v = Verbosity::::default(); assert_eq!(v.tracing_level(), Some(Level::ERROR)); assert_eq!(v.tracing_level_filter(), LevelFilter::ERROR); let v = Verbosity::::default(); assert_eq!(v.tracing_level(), Some(Level::WARN)); assert_eq!(v.tracing_level_filter(), LevelFilter::WARN); let v = Verbosity::::default(); assert_eq!(v.tracing_level(), Some(Level::INFO)); assert_eq!(v.tracing_level_filter(), LevelFilter::INFO); let v = Verbosity::::default(); assert_eq!(v.tracing_level(), Some(Level::DEBUG)); assert_eq!(v.tracing_level_filter(), LevelFilter::DEBUG); let v = Verbosity::::default(); assert_eq!(v.tracing_level(), Some(Level::TRACE)); assert_eq!(v.tracing_level_filter(), LevelFilter::TRACE); } #[test] fn into_opt_level() { let v = Verbosity::::default(); assert_eq!(Option::::from(v), None); let v = Verbosity::::default(); assert_eq!(Option::::from(v), Some(Level::ERROR)); let v = Verbosity::::default(); assert_eq!(Option::::from(v), Some(Level::WARN)); let v = Verbosity::::default(); assert_eq!(Option::::from(v), Some(Level::INFO)); let v = Verbosity::::default(); assert_eq!(Option::::from(v), Some(Level::DEBUG)); let v = Verbosity::::default(); assert_eq!(Option::::from(v), Some(Level::TRACE)); } #[test] fn into_level_filter() { let v = Verbosity::::default(); assert_eq!(LevelFilter::from(v), LevelFilter::OFF); let v = Verbosity::::default(); assert_eq!(LevelFilter::from(v), LevelFilter::ERROR); let v = Verbosity::::default(); assert_eq!(LevelFilter::from(v), LevelFilter::WARN); let v = Verbosity::::default(); assert_eq!(LevelFilter::from(v), LevelFilter::INFO); let v = Verbosity::::default(); assert_eq!(LevelFilter::from(v), LevelFilter::DEBUG); let v = Verbosity::::default(); assert_eq!(LevelFilter::from(v), LevelFilter::TRACE); } }