1#[derive(Debug, Clone, Copy)]
2pub enum LogLevel {
3 Info,
4 Warn,
5 Error,
6}
7
8pub 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}