structopt_flags/
logopt.rs1use crate::{GetWithDefault, LogLevel};
2use log::LevelFilter;
3use std::fmt;
4use structopt::StructOpt;
5
6#[cfg(feature = "simplelog")]
7use crate::SetLogWithDefault;
8#[cfg(feature = "simplelog")]
9use simplelog::{Config, TermLogger, TerminalMode};
10#[derive(StructOpt, Debug, Clone)]
11pub struct LogLevelOpt {
12 #[structopt(
15 name = "loglevel",
16 long = "log-level",
17 short = "L",
18 default_value = "info",
19 global = true
20 )]
21 log_level: LevelFilter,
22}
23
24impl LogLevel for LogLevelOpt {
25 fn get_level_filter(&self) -> LevelFilter {
26 self.log_level
27 }
28}
29
30impl fmt::Display for LogLevelOpt {
31 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
32 write!(f, "{}", self.log_level)
33 }
34}
35
36#[derive(StructOpt, Debug, Clone)]
37pub struct LogLevelOptLower {
38 #[structopt(
41 name = "loglevellower",
42 long = "log-level",
43 short = "l",
44 default_value = "info",
45 global = true,
46 conflicts_with = "loglevel"
47 )]
48 log_level: LevelFilter,
49}
50
51impl LogLevel for LogLevelOptLower {
52 fn get_level_filter(&self) -> LevelFilter {
53 self.log_level
54 }
55}
56
57impl fmt::Display for LogLevelOptLower {
58 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
59 write!(f, "{}", self.log_level)
60 }
61}
62
63#[derive(StructOpt, Debug, Clone)]
64pub struct LogLevelNoDef {
65 #[structopt(name = "loglevel", long = "log-level", short = "L", global = true)]
68 log_level: Option<LevelFilter>,
69}
70
71impl GetWithDefault for LogLevelNoDef {
72 type Item = LevelFilter;
73 fn get_with_default<T: Into<Self::Item>>(&self, default: T) -> Self::Item {
74 self.log_level.unwrap_or_else(|| default.into())
75 }
76}
77
78#[cfg(feature = "simplelog")]
79impl SetLogWithDefault for LogLevelNoDef {
80 fn set_with_default(&self, default: LevelFilter) {
81 TermLogger::init(
82 self.get_with_default(default),
83 Config::default(),
84 TerminalMode::Mixed,
85 )
86 .unwrap_or(());
87 }
88}
89
90impl fmt::Display for LogLevelNoDef {
91 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
92 match self.log_level {
93 Some(x) => write!(f, "{}", x),
94 None => write!(f, "None"),
95 }
96 }
97}
98
99#[derive(StructOpt, Debug, Clone)]
100pub struct LogLevelNoDefLower {
101 #[structopt(name = "loglevel", long = "log-level", short = "l", global = true)]
104 log_level: Option<LevelFilter>,
105}
106
107impl GetWithDefault for LogLevelNoDefLower {
108 type Item = LevelFilter;
109 fn get_with_default<T: Into<Self::Item>>(&self, default: T) -> Self::Item {
110 self.log_level.unwrap_or_else(|| default.into())
111 }
112}
113
114#[cfg(feature = "simplelog")]
115impl SetLogWithDefault for LogLevelNoDefLower {
116 fn set_with_default(&self, default: LevelFilter) {
117 TermLogger::init(
118 self.get_with_default(default),
119 Config::default(),
120 TerminalMode::Mixed,
121 )
122 .unwrap_or(());
123 }
124}
125
126impl fmt::Display for LogLevelNoDefLower {
127 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
128 match self.log_level {
129 Some(x) => write!(f, "{}", x),
130 None => write!(f, "None"),
131 }
132 }
133}