proxy_server/
log.rs

1#[derive(Debug, Clone, Copy)]
2pub enum LogLevel {
3    Info,
4    Warn,
5    Error,
6}
7
8/// Log level [`Info`, `Warn`, `Error`]
9pub const LOG_LEVEL: LogLevel = LogLevel::Info;
10
11impl LogLevel {
12    fn as_num(&self) -> u8 {
13        use LogLevel::*;
14        match &self {
15            Info => 0,
16            Warn => 1,
17            Error => 2,
18        }
19    }
20}
21
22#[derive(Clone)]
23pub struct Log<'a> {
24    level: &'a LogLevel,
25}
26
27impl<'a> Log<'a> {
28    pub fn new(level: &LogLevel) -> Log {
29        Log { level }
30    }
31
32    pub fn println<T, K>(&self, level: LogLevel, tag: &str, msg: K, arg: T)
33    where
34        T: std::fmt::Debug,
35        K: std::fmt::Display,
36    {
37        if self.level.as_num() <= level.as_num() {
38            println!("[ {:?} ] <{}> {}: {:?}", level, tag, msg, arg);
39        }
40    }
41}