mod log_level; pub use log_level::*; pub mod ansi { pub use ansi::*; } use std::sync::Mutex; 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() <= { $crate::LogLevel::Info } { use $crate::ansi::*; eprint!("{BOLD}{BLUE}[INFO]{NORMAL}: "); eprint!($($tokens)*); eprintln!("{NORMAL}"); } }; } #[macro_export] macro_rules! warn { ($($tokens:tt)*) => {{ if *$crate::LOG_LEVEL.lock().unwrap() <= { $crate::LogLevel::Warn } { use $crate::ansi::*; eprint!("{BOLD}{YELLOW}[WARNING]{NORMAL}{WHITE}: "); eprint!($($tokens)*); eprintln!("{NORMAL}"); } }}; } #[macro_export] macro_rules! error { ($($tokens:tt)*) => {{ if *$crate::LOG_LEVEL.lock().unwrap() <= { $crate::LogLevel::Error } { use $crate::ansi::*; eprint!("{BOLD}{RED}[ERROR]{WHITE}: "); eprint!($($tokens)*); eprintln!("{NORMAL}"); } }}; } #[macro_export] macro_rules! fatal { ($($tokens:tt)*) => {{ if *$crate::LOG_LEVEL.lock().unwrap() <= { $crate::LogLevel::Fatal } { use $crate::ansi::*; eprint!("{BOLD}{RED}[FATAL]{WHITE}: "); eprint!($($tokens)*); eprintln!("{NORMAL}"); } std::process::exit(1); }}; }