hp_log/
filter.rs

1use crate::config::FilterConf;
2use crate::color::Color;
3use log::Level;
4
5#[derive(Copy, Clone)]
6pub enum FilterLevel {
7    Off   = 0,
8    Debug = 1,
9    Info  = 2,
10    Warn  = 4,
11    Error = 8,
12    Trace  = 16,
13} 
14
15pub struct Filters {
16    filter: u8,
17}
18
19
20#[allow(dead_code)]
21impl Filters {
22    pub fn new(conf: FilterConf) -> Self {
23        //println!("conf : {:?}", conf);
24        let mut filter = 0u8;
25        if conf.debug {
26            filter |= FilterLevel::Debug as u8;
27        }
28        if conf.info {
29            filter |= FilterLevel::Info as u8;
30        }
31
32        if conf.warn {
33            filter |= FilterLevel::Warn as u8;
34        }
35
36        if conf.error {
37            filter |= FilterLevel::Error as u8;
38        }
39
40        if conf.trace {
41            filter |= FilterLevel::Trace as u8;
42        }
43
44        Filters {
45            filter,
46        }
47    }
48
49    pub fn get_filter(&self) -> u8 {
50        self.filter
51    }
52
53    #[allow(dead_code)]
54    pub fn is_pass(&self, level: FilterLevel) -> bool {
55        0 != (self.filter & level as u8)
56    }
57
58    #[allow(dead_code)]
59    pub fn is_enable(&self, level: log::LevelFilter) -> bool {
60        0 != (self.filter & level as u8)
61    }
62}
63
64#[allow(dead_code)]
65impl FilterLevel {
66    pub fn to_str(self) -> &'static str {
67        match self {
68            FilterLevel::Debug => "DEBUG",
69            FilterLevel::Info  => "INFO",
70            FilterLevel::Warn  => "WARN",
71            FilterLevel::Error => "ERROR",
72            FilterLevel::Trace => "TRACE",
73            FilterLevel::Off => "TRACE",
74        } 
75    }
76
77    pub fn fg_color(self) -> Color {
78        match self {
79            FilterLevel::Debug => Color::Cyan,
80            FilterLevel::Info  => Color::Green,
81            FilterLevel::Warn  => Color::Yellow,
82            FilterLevel::Error => Color::Red,
83            FilterLevel::Trace => Color::White,
84            FilterLevel::Off => Color::White,
85        } 
86    }
87
88    pub fn bg_color(self) -> Color {
89        match self {
90            FilterLevel::Debug => Color::Black,
91            FilterLevel::Info  => Color::Black,
92            FilterLevel::Warn  => Color::Black,
93            FilterLevel::Error => Color::Black,
94            FilterLevel::Trace => Color::Black,
95            FilterLevel::Off => Color::Black,
96        } 
97    }
98
99    pub fn from(digit: u8) -> FilterLevel {
100        match digit {
101            0  => FilterLevel::Off,
102            1  => FilterLevel::Debug,
103            2  => FilterLevel::Info,
104            4  => FilterLevel::Warn,
105            8  => FilterLevel::Error,
106            16 => FilterLevel::Trace,
107            _ => unimplemented!(),
108        }
109    }
110}
111
112impl From<log::LevelFilter> for FilterLevel {
113    fn from(level: log::LevelFilter) -> FilterLevel {
114        match level {
115            log::LevelFilter::Debug   => FilterLevel::Debug,
116            log::LevelFilter::Info    => FilterLevel::Info,
117            log::LevelFilter::Warn    => FilterLevel::Warn,
118            log::LevelFilter::Error   => FilterLevel::Error,
119            log::LevelFilter::Trace   => FilterLevel::Trace,
120            _ => FilterLevel::Off,
121        }
122    }
123}
124impl From<Level> for FilterLevel {
125    fn from(level: Level) -> FilterLevel {
126        match level {
127            Level::Debug   => FilterLevel::Debug,
128            Level::Info    => FilterLevel::Info,
129            Level::Warn    => FilterLevel::Warn,
130            Level::Error   => FilterLevel::Error,
131            Level::Trace   => FilterLevel::Trace,
132        }
133    }
134}