#[macro_export]
macro_rules! do_log_filter {
(target: $target:expr, $log_filter:expr, $lvl:expr, $($arg:tt)+) => ({
{
use captains_log::filter::Filter;
if $lvl <= log::STATIC_MAX_LEVEL && $lvl <= log::max_level() && $log_filter.is_enabled($lvl) {
$log_filter._private_api_log(
std::format_args!($($arg)+),
$lvl,
&($target, std::module_path!(), std::file!(), std::line!()),
);
}
}
});
($log_filter:expr, $lvl:expr, $($arg:tt)+) => (do_log_filter!(target: std::module_path!(), $log_filter, $lvl, $($arg)+))
}
#[allow(unused_imports)]
pub(super) use do_log_filter;
#[macro_export]
macro_rules! logger_error {
($log_filter:expr, $($arg:tt)+) => (
do_log_filter!($log_filter, log::Level::Error, $($arg)+);
)
}
#[allow(unused_imports)]
pub(super) use logger_error;
#[macro_export]
macro_rules! logger_warn {
($log_filter:expr, $($arg:tt)+) => (
do_log_filter!($log_filter, log::Level::Warn, $($arg)+);
)
}
#[allow(unused_imports)]
pub(super) use logger_warn;
#[macro_export]
macro_rules! logger_info {
($log_filter:expr, $($arg:tt)+) => (
do_log_filter!($log_filter, log::Level::Info, $($arg)+);
)
}
#[allow(unused_imports)]
pub(super) use logger_info;
#[macro_export]
macro_rules! logger_debug {
($log_filter:expr, $($arg:tt)+) => (
do_log_filter!($log_filter, log::Level::Debug, $($arg)+);
)
}
#[allow(unused_imports)]
pub(super) use logger_debug;
#[macro_export]
macro_rules! logger_trace {
($log_filter:expr, $($arg:tt)+) => (
do_log_filter!($log_filter, log::Level::Trace, $($arg)+);
)
}
#[allow(unused_imports)]
pub(super) use logger_trace;
#[macro_export]
macro_rules! logger_debug_assert {
($log_filter:expr, $($arg:tt)*) => (if std::cfg!(debug_assertions) { $crate::logger_assert!($log_filter, $($arg)*); });
}
#[allow(unused_imports)]
pub(super) use logger_debug_assert;
#[macro_export]
macro_rules! logger_debug_assert_eq {
($log_filter:expr, $($arg:tt)*) => (if std::cfg!(debug_assertions) { $crate::logger_assert_eq!($log_filter, $($arg)*); })
}
#[allow(unused_imports)]
pub(super) use logger_debug_assert_eq;
#[macro_export]
macro_rules! logger_assert {
($log_filter:expr, $cond:expr) => ({
if !$cond {
do_log_filter!(
$log_filter,
log::Level::Error,
"assertion failed: {:?}",
$cond
);
std::panic!(r#"assertion failed: {:?}"#, $cond);
}
});
($log_filter:expr, $cond:expr,) => ({
$crate::logger_assert!($log_filter, $cond);
});
($log_filter:expr, $cond:expr, $($arg:tt)+) => ({
if !$cond {
do_log_filter!(
$log_filter,
log::Level::Error,
"assertion failed: {}",
std::format_args!($($arg)+)
);
std::panic!(r#"{}"#, std::format_args!($($arg)+));
}
});
}
#[allow(unused_imports)]
pub(super) use logger_assert;
#[macro_export]
macro_rules! logger_assert_eq {
($log_filter:expr, $left:expr, $right:expr) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if !(*left_val == *right_val) {
do_log_filter!($log_filter, log::Level::Error, "assertion failed! \
expected: (`left == right`) actual: (`{:?}` != `{:?}`)", &*left_val, &*right_val);
std::panic!(r#"assertion failed: `(left == right)`
left: `{:?}`,
right: `{:?}`"#, &*left_val, &*right_val);
}
}
}
});
($log_filter:expr, $left:expr, $right:expr,) => ({
$crate::logger_assert_eq!($log_filter, $left, $right);
});
($log_filter:expr, $left:expr, $right:expr, $($arg:tt)+) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val == *right_val) {
do_log_filter!($log_filter, log::Level::Error, "assertion failed! \
expected: `(left == right)` actual: (`{:?}` != `{:?}`)", &*left_val, &*right_val);
std::panic!(r#"assertion failed: `(left == right)`
left: `{:?}`,
right: `{:?}`: {}"#, &*left_val, &*right_val,
std::format_args!($($arg)+));
}
}
}
});
}
#[allow(unused_imports)]
pub(super) use logger_assert_eq;
#[macro_export]
macro_rules! log_debug_assert {
($($arg:tt)*) => (if std::cfg!(debug_assertions) { $crate::log_assert!($($arg)*); });
}
#[allow(unused_imports)]
pub(super) use log_debug_assert;
#[macro_export]
macro_rules! log_debug_assert_eq {
($($arg:tt)*) => (if std::cfg!(debug_assertions) { $crate::log_assert_eq!($($arg)*); })
}
#[allow(unused_imports)]
pub(super) use log_debug_assert_eq;
#[macro_export]
macro_rules! log_assert {
($cond:expr) => ({
if !$cond {
log::error!(
"assertion failed: {:?}",
$cond
);
std::panic!(r#"assertion failed: {:?}"#, $cond);
}
});
($cond:expr,) => ({
$crate::log_assert!($log_filter, $cond);
});
($cond:expr, $($arg:tt)+) => ({
if !$cond {
log::error!(
"assertion failed: {}",
std::format_args!($($arg)+)
);
std::panic!(r#"{}"#, std::format_args!($($arg)+));
}
});
}
#[allow(unused_imports)]
pub(super) use log_assert;
#[macro_export]
macro_rules! log_assert_eq {
($left:expr, $right:expr) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if !(*left_val == *right_val) {
log::error!("assertion failed! \
expected: (`left == right`) actual: (`{:?}` != `{:?}`)", &*left_val, &*right_val);
std::panic!(r#"assertion failed: `(left == right)`
left: `{:?}`,
right: `{:?}`"#, &*left_val, &*right_val);
}
}
}
});
($left:expr, $right:expr,) => ({
$crate::log_assert_eq!($left, $right);
});
($left:expr, $right:expr, $($arg:tt)+) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val == *right_val) {
log::error!( "assertion failed! \
expected: `(left == right)` actual: (`{:?}` != `{:?}`)", &*left_val, &*right_val);
std::panic!(r#"assertion failed: `(left == right)`
left: `{:?}`,
right: `{:?}`: {}"#, &*left_val, &*right_val,
std::format_args!($($arg)+));
}
}
}
});
}
#[allow(unused_imports)]
pub(super) use log_assert_eq;
#[macro_export]
macro_rules! log_println {
($($arg:tt)+) => {
std::println!($($arg)+);
log::info!($($arg)+);
}
}
#[allow(unused_imports)]
pub(super) use log_println;
#[macro_export]
macro_rules! log_eprintln {
($($arg:tt)+) => {
std::eprintln!($($arg)+);
log::info!($($arg)+);
}
}
#[allow(unused_imports)]
pub(super) use log_eprintln;