use std::sync::OnceLock;
static DEBUG_MODE: OnceLock<bool> = OnceLock::new();
#[doc(hidden)]
pub fn is_debug_mode() -> bool {
*DEBUG_MODE.get_or_init(|| std::env::var("KASL_DEBUG").is_ok() || std::env::var("RUST_LOG").is_ok())
}
#[macro_export]
macro_rules! msg_print {
($msg:expr) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::info!("{}{}", $crate::libs::output::style().prefix($crate::libs::output::Kind::Print), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Print, &$msg, false);
}
};
($msg:expr, true) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::info!("\n{}{}\n", $crate::libs::output::style().prefix($crate::libs::output::Kind::Print), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Print, &$msg, true);
}
};
}
#[macro_export]
macro_rules! msg_success {
($msg:expr) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::info!("{}{}", $crate::libs::output::style().prefix($crate::libs::output::Kind::Success), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Success, &$msg, false);
}
};
($msg:expr, true) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::info!("\n{}{}\n", $crate::libs::output::style().prefix($crate::libs::output::Kind::Success), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Success, &$msg, true);
}
};
}
#[macro_export]
macro_rules! msg_error {
($msg:expr) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::error!("{}{}", $crate::libs::output::style().prefix($crate::libs::output::Kind::Error), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Error, &$msg, false);
}
};
($msg:expr, true) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::error!("\n{}{}\n", $crate::libs::output::style().prefix($crate::libs::output::Kind::Error), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Error, &$msg, true);
}
};
}
#[macro_export]
macro_rules! msg_warning {
($msg:expr) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::warn!("{}{}", $crate::libs::output::style().prefix($crate::libs::output::Kind::Warning), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Warning, &$msg, false);
}
};
($msg:expr, true) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::warn!("\n{}{}\n", $crate::libs::output::style().prefix($crate::libs::output::Kind::Warning), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Warning, &$msg, true);
}
};
}
#[macro_export]
macro_rules! msg_info {
($msg:expr) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::info!("{}{}", $crate::libs::output::style().prefix($crate::libs::output::Kind::Info), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Info, &$msg, false);
}
};
($msg:expr, true) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::info!("\n{}{}\n", $crate::libs::output::style().prefix($crate::libs::output::Kind::Info), $msg);
} else {
$crate::libs::output::emit($crate::libs::output::Kind::Info, &$msg, true);
}
};
}
#[macro_export]
macro_rules! msg_debug {
($msg:expr) => {
if $crate::libs::messages::macros::is_debug_mode() {
tracing::debug!("🔍 {}", $msg);
}
};
}
#[macro_export]
macro_rules! msg_error_anyhow {
($msg:expr) => {
anyhow::anyhow!("{}", $msg)
};
}
#[macro_export]
macro_rules! msg_bail_anyhow {
($msg:expr) => {
anyhow::bail!("{}", $msg)
};
}