cyfs_debug/log/
constants.rs

1use cyfs_base::{BuckyError, BuckyResult};
2use std::{fmt::{Display, self}, str::FromStr};
3use log::{LevelFilter, Level};
4
5use flexi_logger::Duplicate;
6use serde::{Serialize, Deserialize};
7
8#[repr(usize)]
9#[derive(Copy, Eq, PartialEq, PartialOrd, Ord, Clone, Debug, Hash, Serialize, Deserialize)]
10pub enum LogLevel {
11    Off = 0,
12    Error = 1,
13    Warn,
14    Info,
15    Debug,
16    Trace,
17}
18
19impl Default for LogLevel {
20    fn default() -> Self {
21        #[cfg(debug_assertions)]
22        {Self::Debug}
23
24        #[cfg(not(debug_assertions))]
25        {Self::Info}
26    }
27}
28
29impl Display for LogLevel {
30    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
31        let level = match *self {
32            Self::Off => "off",
33            Self::Trace => "trace",
34            Self::Debug => "debug",
35            Self::Info => "info",
36            Self:: Warn => "warn",
37            Self::Error => "error",
38        };
39        write!(f, "{}", level)
40    }
41}
42impl FromStr for LogLevel {
43    type Err = BuckyError;
44
45    /// Parse a string representation of an IPv4 address.
46    fn from_str(level: &str) -> BuckyResult<LogLevel> {
47        use LogLevel::*;
48
49        let ret = match level {
50            "off" => Off,
51            "trace" => Trace,
52            "debug" => Debug,
53            "info" => Info,
54            "warn" => Warn,
55            "error" => Error,
56            v @ _ => {
57                println!("invalid log level: {}", v);
58                Off
59            }
60        };
61
62        Ok(ret)
63    }
64}
65
66
67impl Into<Duplicate> for LogLevel {
68    fn into(self) -> Duplicate {
69
70        match self {
71            Self::Trace => Duplicate::Trace,
72            Self::Debug => Duplicate::Debug,
73            Self::Info => Duplicate::Info,
74            Self:: Warn => Duplicate::Warn,
75            Self::Error => Duplicate::Error,
76            Self::Off => Duplicate::None,
77        }
78    }
79}
80
81impl Into<LevelFilter> for LogLevel {
82    fn into(self) -> LevelFilter {
83
84        match self {
85            Self::Trace => LevelFilter::Trace,
86            Self::Debug => LevelFilter::Debug,
87            Self::Info => LevelFilter::Info,
88            Self:: Warn => LevelFilter::Warn,
89            Self::Error => LevelFilter::Error,
90            Self::Off => LevelFilter::Off,
91        }
92    }
93}
94
95impl From<LevelFilter> for LogLevel {
96    fn from(v: LevelFilter) -> Self {
97        match v {
98            LevelFilter::Trace => LogLevel::Trace,
99            LevelFilter::Debug => LogLevel::Debug,
100            LevelFilter::Info => LogLevel::Info,
101            LevelFilter:: Warn => LogLevel::Warn,
102            LevelFilter::Error => LogLevel::Error,
103            LevelFilter::Off => LogLevel::Off,
104        }
105    }
106}
107
108
109impl From<Level> for LogLevel {
110    fn from(v: Level) -> Self {
111
112        match v {
113            Level::Trace => Self::Trace,
114            Level::Debug => Self::Debug,
115            Level::Info => Self::Info,
116            Level::Warn => Self::Warn,
117            Level::Error => Self::Error,
118        }
119    }
120}