use ansi_term::Color::{Blue, Cyan, Red, Yellow}; pub struct Logger { log_level: LogLevel, } impl Logger { pub fn new(log_level: LogLevel) -> Logger { Logger { log_level } } pub fn log>(&self, log_level: LogLevel, message: T) { if self.log_level.clone() as i32 >= log_level.clone() as i32 { match log_level { LogLevel::QUIET => (), LogLevel::SEVERE => eprintln!("{}: {}", Red.paint("[SEVERE]"), message.into()), LogLevel::INFO => println!("{}: {}", Cyan.paint("[INFO]"), message.into()), LogLevel::WARNING => println!("{}: {}", Yellow.paint("[WARNING]"), message.into()), LogLevel::DETAIL => println!("{}: {}", Blue.paint("[DETAIL]"), message.into()), LogLevel::DETAILER => println!("{}: {}", Blue.paint("[DETAILER]"), message.into()), } } } } #[allow(dead_code)] #[derive(Clone, Debug)] #[repr(u8)] pub enum LogLevel { QUIET = 0, SEVERE = 1, INFO = 2, WARNING = 3, // Default DETAIL = 4, DETAILER = 5, } impl From for LogLevel { fn from(number: u8) -> LogLevel { match number { 0 => LogLevel::QUIET, 1 => LogLevel::SEVERE, 2 => LogLevel::INFO, 4 => LogLevel::DETAIL, 5 => LogLevel::DETAILER, _ => LogLevel::WARNING, // 3, also fallback } } }