use std::io::Write;
use std::sync::Once;
use tracing_subscriber::EnvFilter;
static INIT: Once = Once::new();
pub fn init() {
INIT.call_once(|| {
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("warn"));
let subscriber = tracing_subscriber::fmt()
.with_env_filter(filter)
.with_target(false)
.compact()
.finish();
let _ = tracing::subscriber::set_global_default(subscriber);
});
}
pub fn print_error(msg: &str) {
tracing::error!("{}", msg);
eprintln!("\x1b[1;31m✗ {}\x1b[0m", msg);
}
pub fn print_warning(msg: &str) {
tracing::warn!("{}", msg);
eprintln!("\x1b[1;33m⚠ {}\x1b[0m", msg);
}
pub fn print_success(msg: &str) {
tracing::info!("{}", msg);
println!("\x1b[1;32m✓ {}\x1b[0m", msg);
}
pub fn show_cursor() {
print!("\x1b[?25h");
let _ = std::io::stdout().flush();
}
pub fn hide_cursor() {
print!("\x1b[?25l");
let _ = std::io::stdout().flush();
}