use std::collections::HashSet;
use std::sync::atomic::AtomicBool;
use std::sync::{LazyLock, Mutex};
#[doc(hidden)]
pub use anstream;
#[doc(hidden)]
pub use owo_colors;
pub static ENABLED: AtomicBool = AtomicBool::new(false);
pub fn enable() {
ENABLED.store(true, std::sync::atomic::Ordering::SeqCst);
}
pub fn disable() {
ENABLED.store(false, std::sync::atomic::Ordering::SeqCst);
}
#[macro_export]
macro_rules! warn_user {
($($arg:tt)*) => {
use $crate::warnings::anstream::eprintln;
use $crate::warnings::owo_colors::OwoColorize;
if $crate::warnings::ENABLED.load(std::sync::atomic::Ordering::SeqCst) {
let message = format!("{}", format_args!($($arg)*));
let formatted = message.bold();
eprintln!("{}{} {formatted}", "warning".yellow().bold(), ":".bold());
}
};
}
pub static WARNINGS: LazyLock<Mutex<HashSet<String>>> = LazyLock::new(Mutex::default);
#[macro_export]
macro_rules! warn_user_once {
($($arg:tt)*) => {
use $crate::warnings::anstream::eprintln;
use $crate::warnings::owo_colors::OwoColorize;
if $crate::warnings::ENABLED.load(std::sync::atomic::Ordering::SeqCst) {
if let Ok(mut states) = $crate::warnings::WARNINGS.lock() {
let message = format!("{}", format_args!($($arg)*));
if states.insert(message.clone()) {
eprintln!("{}{} {}", "warning".yellow().bold(), ":".bold(), message.bold());
}
}
}
};
}