cyfs_debug/log/
constants.rs1use 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 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}