clap_verbosity_flag/
tracing.rs1pub use tracing_core::{Level, LevelFilter};
5
6use crate::{LogLevel, Verbosity, VerbosityFilter};
7
8impl From<VerbosityFilter> for LevelFilter {
9 fn from(filter: VerbosityFilter) -> Self {
10 match filter {
11 VerbosityFilter::Off => LevelFilter::OFF,
12 VerbosityFilter::Error => LevelFilter::ERROR,
13 VerbosityFilter::Warn => LevelFilter::WARN,
14 VerbosityFilter::Info => LevelFilter::INFO,
15 VerbosityFilter::Debug => LevelFilter::DEBUG,
16 VerbosityFilter::Trace => LevelFilter::TRACE,
17 }
18 }
19}
20
21impl From<LevelFilter> for VerbosityFilter {
22 fn from(level: LevelFilter) -> Self {
23 match level {
24 LevelFilter::OFF => Self::Off,
25 LevelFilter::ERROR => Self::Error,
26 LevelFilter::WARN => Self::Warn,
27 LevelFilter::INFO => Self::Info,
28 LevelFilter::DEBUG => Self::Debug,
29 LevelFilter::TRACE => Self::Trace,
30 }
31 }
32}
33
34impl From<VerbosityFilter> for Option<Level> {
35 fn from(filter: VerbosityFilter) -> Self {
36 match filter {
37 VerbosityFilter::Off => None,
38 VerbosityFilter::Error => Some(Level::ERROR),
39 VerbosityFilter::Warn => Some(Level::WARN),
40 VerbosityFilter::Info => Some(Level::INFO),
41 VerbosityFilter::Debug => Some(Level::DEBUG),
42 VerbosityFilter::Trace => Some(Level::TRACE),
43 }
44 }
45}
46
47impl From<Option<Level>> for VerbosityFilter {
48 fn from(level: Option<Level>) -> Self {
49 match level {
50 None => Self::Off,
51 Some(Level::ERROR) => Self::Error,
52 Some(Level::WARN) => Self::Warn,
53 Some(Level::INFO) => Self::Info,
54 Some(Level::DEBUG) => Self::Debug,
55 Some(Level::TRACE) => Self::Trace,
56 }
57 }
58}
59
60impl<L: LogLevel> From<Verbosity<L>> for LevelFilter {
61 fn from(v: Verbosity<L>) -> Self {
62 v.tracing_level_filter()
63 }
64}
65
66impl<L: LogLevel> From<Verbosity<L>> for Option<Level> {
67 fn from(v: Verbosity<L>) -> Self {
68 v.tracing_level()
69 }
70}
71
72#[cfg(test)]
73mod tests {
74 use super::*;
75 use crate::{DebugLevel, ErrorLevel, InfoLevel, OffLevel, TraceLevel, Verbosity, WarnLevel};
76
77 #[test]
78 fn tracing_level() {
79 let v = Verbosity::<OffLevel>::default();
80 assert_eq!(v.tracing_level(), None);
81 assert_eq!(v.tracing_level_filter(), LevelFilter::OFF);
82
83 let v = Verbosity::<ErrorLevel>::default();
84 assert_eq!(v.tracing_level(), Some(Level::ERROR));
85 assert_eq!(v.tracing_level_filter(), LevelFilter::ERROR);
86
87 let v = Verbosity::<WarnLevel>::default();
88 assert_eq!(v.tracing_level(), Some(Level::WARN));
89 assert_eq!(v.tracing_level_filter(), LevelFilter::WARN);
90
91 let v = Verbosity::<InfoLevel>::default();
92 assert_eq!(v.tracing_level(), Some(Level::INFO));
93 assert_eq!(v.tracing_level_filter(), LevelFilter::INFO);
94
95 let v = Verbosity::<DebugLevel>::default();
96 assert_eq!(v.tracing_level(), Some(Level::DEBUG));
97 assert_eq!(v.tracing_level_filter(), LevelFilter::DEBUG);
98
99 let v = Verbosity::<TraceLevel>::default();
100 assert_eq!(v.tracing_level(), Some(Level::TRACE));
101 assert_eq!(v.tracing_level_filter(), LevelFilter::TRACE);
102 }
103
104 #[test]
105 fn into_opt_level() {
106 let v = Verbosity::<OffLevel>::default();
107 assert_eq!(Option::<Level>::from(v), None);
108
109 let v = Verbosity::<ErrorLevel>::default();
110 assert_eq!(Option::<Level>::from(v), Some(Level::ERROR));
111
112 let v = Verbosity::<WarnLevel>::default();
113 assert_eq!(Option::<Level>::from(v), Some(Level::WARN));
114
115 let v = Verbosity::<InfoLevel>::default();
116 assert_eq!(Option::<Level>::from(v), Some(Level::INFO));
117
118 let v = Verbosity::<DebugLevel>::default();
119 assert_eq!(Option::<Level>::from(v), Some(Level::DEBUG));
120
121 let v = Verbosity::<TraceLevel>::default();
122 assert_eq!(Option::<Level>::from(v), Some(Level::TRACE));
123 }
124
125 #[test]
126 fn into_level_filter() {
127 let v = Verbosity::<OffLevel>::default();
128 assert_eq!(LevelFilter::from(v), LevelFilter::OFF);
129
130 let v = Verbosity::<ErrorLevel>::default();
131 assert_eq!(LevelFilter::from(v), LevelFilter::ERROR);
132
133 let v = Verbosity::<WarnLevel>::default();
134 assert_eq!(LevelFilter::from(v), LevelFilter::WARN);
135
136 let v = Verbosity::<InfoLevel>::default();
137 assert_eq!(LevelFilter::from(v), LevelFilter::INFO);
138
139 let v = Verbosity::<DebugLevel>::default();
140 assert_eq!(LevelFilter::from(v), LevelFilter::DEBUG);
141
142 let v = Verbosity::<TraceLevel>::default();
143 assert_eq!(LevelFilter::from(v), LevelFilter::TRACE);
144 }
145}