use std::sync::atomic::{AtomicBool, Ordering};
static VERBOSE: AtomicBool = AtomicBool::new(true);
pub fn set_verbose(verbose: bool) {
VERBOSE.store(verbose, Ordering::Relaxed);
}
pub fn is_verbose() -> bool {
VERBOSE.load(Ordering::Relaxed)
}
#[macro_export]
macro_rules! info {
($($arg:tt)*) => {
println!("{}", format!($($arg)*));
}
}
#[macro_export]
macro_rules! warn {
($($arg:tt)*) => {
use colored::Colorize;
eprintln!("{} {}", "WARNING ⚠️ ".yellow().bold(), format!($($arg)*));
}
}
#[macro_export]
macro_rules! error {
($($arg:tt)*) => {
use colored::Colorize;
eprintln!("{} {}", "ERROR 💥".red().bold(), format!($($arg)*));
}
}
#[macro_export]
macro_rules! success {
($($arg:tt)*) => {
use colored::Colorize;
println!("{} {}", "SUCCESS ✅".green().bold(), format!($($arg)*));
}
}
#[macro_export]
macro_rules! verbose {
($($arg:tt)*) => {
if $crate::logging::is_verbose() {
println!("{}", format!($($arg)*));
}
}
}
#[macro_export]
macro_rules! section {
($($arg:tt)*) => {
use colored::Colorize;
if $crate::logging::is_verbose() {
println!();
println!("{}", format!($($arg)*).cyan().bold());
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_verbosity_toggle() {
set_verbose(true);
assert!(is_verbose());
set_verbose(false);
assert!(!is_verbose());
set_verbose(true);
assert!(is_verbose());
}
}