mod log_level; pub use log_level::*; use std::sync::Mutex; pub const NORMAL: &str = "\x1b[0m"; pub const BOLD: &str = "\x1b[1m"; pub const WHITE: &str = "\x1b[37m"; pub const RED: &str = "\x1b[31m"; pub const YELLOW: &str = "\x1b[33m"; pub const BLUE: &str = "\x1b[34m"; pub static LOG_LEVEL: Mutex = Mutex::new(LogLevel::Warn); pub fn set_log_level(level: LogLevel) { *LOG_LEVEL.lock().unwrap() = level; } pub fn get_log_level() -> LogLevel { *LOG_LEVEL.lock().unwrap() } #[macro_export] macro_rules! info { ($($tokens:tt)*) => { if *$crate::LOG_LEVEL.lock().unwrap() <= { LogLevel::Info } { eprint!("{}{}[INFO]{}: ", $crate::BOLD, $crate::BLUE, $crate::NORMAL, ); eprint!($($tokens)*); eprintln!("{}", $crate::NORMAL, ); } }; } #[macro_export] macro_rules! warn { ($($tokens:tt)*) => {{ if *$crate::LOG_LEVEL.lock().unwrap() <= { LogLevel::Warn } { eprint!("{}{}[WARNING]{}{}: ", $crate::BOLD, $crate::YELLOW, $crate::NORMAL, $crate::WHITE, ); eprint!($($tokens)*); eprintln!("{}", $crate::NORMAL, ); } }}; } #[macro_export] macro_rules! error { ($($tokens:tt)*) => {{ if *$crate::LOG_LEVEL.lock().unwrap() <= { LogLevel::Error } { eprint!("{}{}[ERROR]{}: ", $crate::BOLD, $crate::RED, $crate::WHITE, ); eprint!($($tokens)*); eprintln!("{}", $crate::NORMAL, ); } std::process::exit(1); }}; }