use colored::Colorize;
use std::sync::atomic::{AtomicBool, Ordering};
static VERBOSE: AtomicBool = AtomicBool::new(false);
pub fn set_verbose(verbose: bool) {
VERBOSE.store(verbose, Ordering::Relaxed);
}
pub fn is_verbose() -> bool {
VERBOSE.load(Ordering::Relaxed)
}
pub fn verboseln(args: std::fmt::Arguments) {
if is_verbose() {
println!("{args}");
}
}
pub fn println(args: std::fmt::Arguments) {
println!("{args}");
}
pub fn errorln(args: std::fmt::Arguments) {
eprintln!("{} {}", "â Error:".red().bold(), args);
}
pub fn successln(args: std::fmt::Arguments) {
println!("{} {}", "â
".green(), args);
}
pub fn infoln(args: std::fmt::Arguments) {
if is_verbose() {
println!("{} {}", "âšī¸ ".bright_blue(), args);
}
}
#[macro_export]
macro_rules! log_verbose {
($($arg:tt)*) => {
$crate::log::verboseln(format_args!($($arg)*))
};
}
#[macro_export]
macro_rules! log_print {
() => {
println!()
};
($($arg:tt)*) => {
$crate::log::println(format_args!($($arg)*))
};
}
#[macro_export]
macro_rules! log_error {
($($arg:tt)*) => {
$crate::log::errorln(format_args!($($arg)*))
};
}
#[macro_export]
macro_rules! log_success {
($($arg:tt)*) => {
$crate::log::successln(format_args!($($arg)*))
};
}
#[macro_export]
macro_rules! log_info {
($($arg:tt)*) => {
$crate::log::infoln(format_args!($($arg)*))
};
}