clap_verbosity_flag/
log.rs1pub use log::{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.log_level_filter()
63 }
64}
65
66impl<L: LogLevel> From<Verbosity<L>> for Option<Level> {
67 fn from(v: Verbosity<L>) -> Self {
68 v.log_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 log_level() {
79 let v = Verbosity::<OffLevel>::default();
80 assert_eq!(v.log_level(), None);
81 assert_eq!(v.log_level_filter(), LevelFilter::Off);
82
83 let v = Verbosity::<ErrorLevel>::default();
84 assert_eq!(v.log_level(), Some(Level::Error));
85 assert_eq!(v.log_level_filter(), LevelFilter::Error);
86
87 let v = Verbosity::<WarnLevel>::default();
88 assert_eq!(v.log_level(), Some(Level::Warn));
89 assert_eq!(v.log_level_filter(), LevelFilter::Warn);
90
91 let v = Verbosity::<InfoLevel>::default();
92 assert_eq!(v.log_level(), Some(Level::Info));
93 assert_eq!(v.log_level_filter(), LevelFilter::Info);
94
95 let v = Verbosity::<DebugLevel>::default();
96 assert_eq!(v.log_level(), Some(Level::Debug));
97 assert_eq!(v.log_level_filter(), LevelFilter::Debug);
98
99 let v = Verbosity::<TraceLevel>::default();
100 assert_eq!(v.log_level(), Some(Level::Trace));
101 assert_eq!(v.log_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}