use crate::config::DEBUG_ENABLED;
use std::sync::atomic::Ordering;
pub fn enable_debug() {
DEBUG_ENABLED.store(true, Ordering::Relaxed);
if DEBUG_ENABLED.load(Ordering::Relaxed) {
eprintln!("🔍 \x1b[36mDEBUG\x1b[0m [debug.rs:11] Debug mode enabled for Wasmrun session");
}
}
pub fn is_debug_enabled() -> bool {
DEBUG_ENABLED.load(Ordering::Relaxed)
}
#[macro_export]
macro_rules! debug_println {
($($arg:tt)*) => {
if $crate::debug::is_debug_enabled() {
eprintln!("🔍 \x1b[36mDEBUG\x1b[0m [{}:{}] {}",
file!().split('/').last().unwrap_or("unknown"),
line!(),
format_args!($($arg)*));
}
};
}
#[macro_export]
macro_rules! trace_println {
($($arg:tt)*) => {
if $crate::debug::is_debug_enabled() {
eprintln!("🔬 \x1b[90mTRACE\x1b[0m [{}:{}] {}",
file!().split('/').last().unwrap_or("unknown"),
line!(),
format_args!($($arg)*));
}
};
}
#[macro_export]
macro_rules! debug_enter {
($func_name:expr) => {
if $crate::debug::is_debug_enabled() {
eprintln!("🚪 \x1b[32mENTER\x1b[0m [{}:{}] {}",
file!().split('/').last().unwrap_or("unknown"),
line!(),
$func_name);
}
};
($func_name:expr, $($arg:tt)*) => {
if $crate::debug::is_debug_enabled() {
eprintln!("🚪 \x1b[32mENTER\x1b[0m [{}:{}] {} - {}",
file!().split('/').last().unwrap_or("unknown"),
line!(),
$func_name,
format_args!($($arg)*));
}
};
}
#[macro_export]
macro_rules! debug_exit {
($func_name:expr) => {
if $crate::debug::is_debug_enabled() {
eprintln!(
"🚶 \x1b[33mEXIT\x1b[0m [{}:{}] {}",
file!().split('/').last().unwrap_or("unknown"),
line!(),
$func_name
);
}
};
($func_name:expr, $result:expr) => {
if $crate::debug::is_debug_enabled() {
eprintln!(
"🚶 \x1b[33mEXIT\x1b[0m [{}:{}] {} -> {:?}",
file!().split('/').last().unwrap_or("unknown"),
line!(),
$func_name,
$result
);
}
};
}
#[macro_export]
macro_rules! debug_time {
($name:expr, $block:block) => {{
let start = std::time::Instant::now();
let result = $block;
if $crate::debug::is_debug_enabled() {
eprintln!(
"⏱️ \x1b[35mTIME\x1b[0m [{}:{}] {} took {:?}",
file!().split('/').last().unwrap_or("unknown"),
line!(),
$name,
start.elapsed()
);
}
result
}};
}
#[macro_export]
macro_rules! info_println {
($($arg:tt)*) => {
println!("{}", format_args!($($arg)*));
};
}
#[macro_export]
macro_rules! success_println {
($($arg:tt)*) => {
println!("✅ {}", format_args!($($arg)*));
};
}
#[macro_export]
macro_rules! warn_println {
($($arg:tt)*) => {
eprintln!("⚠️ {}", format_args!($($arg)*));
};
}
#[macro_export]
macro_rules! error_println {
($($arg:tt)*) => {
eprintln!("❌ {}", format_args!($($arg)*));
};
}