#[macro_export]
macro_rules! impl_veilid_log_facility {
($facility:literal) => {
const __VEILID_LOG_FACILITY: &'static str = $facility;
};
}
#[macro_export]
macro_rules! log_veilid_api_error {
($self_expr:ident) => {
|e: &$crate::VeilidAPIError| {
match e.log_level() {
$crate::Level::ERROR => {
veilid_log!($self_expr error "error = {}", e);
}
$crate::Level::WARN => {
veilid_log!($self_expr warn "error = {}", e);
}
$crate::Level::INFO => {
veilid_log!($self_expr info "error = {}", e);
}
$crate::Level::DEBUG => {
veilid_log!($self_expr debug "error = {}", e);
}
$crate::Level::TRACE => {
veilid_log!($self_expr trace "error = {}", e);
}
}
}
};
}
#[macro_export]
macro_rules! veilid_log_err {
($self_expr:expr) => {
|e| veilid_log_event!($self_expr, prefix: "", level: $crate::Level::ERROR, "{}", e)
};
($self_expr:expr, $message:expr) => {
|e| veilid_log_event!($self_expr, prefix: "", level: $crate::Level::ERROR, "{}: {}", $message, e)
};
($self_expr:expr, $fmt:expr, $($args:tt)*) => {
|e| veilid_log_event!($self_expr, prefix: "", level: $crate::Level::ERROR, concat!($fmt,": {}"), $($args)*, e)
};
}
#[macro_export]
macro_rules! veilid_log_dbg {
($self_expr:expr) => {
|e| veilid_log_event!($self_expr, prefix: "", level: $crate::Level::DEBUG, "{}", e)
};
($self_expr:expr, $message:expr) => {
|e| veilid_log_event!($self_expr, prefix: "", level: $crate::Level::DEBUG, "{}: {}", $message, e)
};
($self_expr:expr, $fmt:expr, $($args:tt)*) => {
|e| veilid_log_event!($self_expr, prefix: "", level: $crate::Level::DEBUG, concat!($fmt,": {}"), $($args)*, e)
};
}
#[macro_export]
macro_rules! veilid_log_event {
($self_expr:expr, prefix: $prefix:literal, level: $lvl:expr, $text:expr) => {event!(
target: self::__VEILID_LOG_FACILITY,
$lvl,
__VEILID_LOG_KEY = $self_expr.log_key(),
concat!($prefix,"{}"),
$text)
};
($self_expr:expr, prefix: $prefix:literal, level: $lvl:expr, target: $target:expr, $text:expr) => {event!(
target: $target,
$lvl,
__VEILID_LOG_KEY = $self_expr.log_key(),
concat!($prefix,"{}"),
$text)
};
($self_expr:expr, prefix: $prefix:literal, level: $lvl:expr, $fmt:expr, $($args:tt)*) => {event!(
target: self::__VEILID_LOG_FACILITY,
$lvl,
__VEILID_LOG_KEY = $self_expr.log_key(),
concat!($prefix,$fmt),
$($args)*)
};
($self_expr:expr, prefix: $prefix:literal, level: $lvl:expr, target: $target:expr, $fmt:expr, $($args:tt)*) => {event!(
target: $target,
$lvl,
__VEILID_LOG_KEY = $self_expr.log_key(),
concat!($prefix,$fmt),
$($args)*)
};
($self_expr:expr, prefix: $prefix:literal, level: $lvl:expr, fields: $($k:ident).+ = $($fields:tt)*) => {event!(
target: self::__VEILID_LOG_FACILITY,
$lvl,
__VEILID_LOG_KEY = $self_expr.log_key(),
$($k).+ = $($fields)*,
concat!($prefix,""))
};
($self_expr:expr, prefix: $prefix:literal, level: $lvl:expr, target: $target:expr, fields: $($k:ident).+ = $($fields:tt)*) => {event!(
target: $target,
$lvl,
__VEILID_LOG_KEY = $self_expr.log_key(),
$($k).+ = $($fields)*,
concat!($prefix,""))
};
}
#[cfg(debug_assertions)]
pub(crate) const DEBUGWARN: tracing::Level = tracing::Level::DEBUG;
#[cfg(not(debug_assertions))]
pub(crate) const DEBUGWARN: tracing::Level = tracing::Level::WARN;
#[macro_export]
macro_rules! veilid_log {
($self_ident:ident error $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::ERROR, $text)};
($self_ident:ident error target: $target:expr, $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::ERROR, target: $target, $text)};
($self_ident:ident error $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::ERROR, $fmt, $($args)*)};
($self_ident:ident error target: $target:expr, $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::ERROR, target: $target, $fmt, $($args)*)};
($self_ident:ident error, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident level: $crate::Level::ERROR, fields: $($k).+ = $($fields)*)};
($self_ident:ident error target: $target:expr, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::ERROR, target: $target, fields: $($k).+ = $($fields)*)};
($self_ident:ident warn $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::WARN, $text)};
($self_ident:ident warn target: $target:expr, $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::WARN, target: $target, $text)};
($self_ident:ident warn $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::WARN, $fmt, $($args)*)};
($self_ident:ident warn target: $target:expr, $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::WARN, target: $target, $fmt, $($args)*)};
($self_ident:ident warn, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::WARN, fields: $($k).+ = $($fields)*)};
($self_ident:ident warn target: $target:expr, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::WARN, target: $target, fields: $($k).+ = $($fields)*)};
($self_ident:ident info $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::INFO, $text)};
($self_ident:ident info target: $target:expr, $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::INFO, target: $target, $text)};
($self_ident:ident info $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::INFO, $fmt, $($args)*)};
($self_ident:ident info target: $target:expr, $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::INFO, target: $target, $fmt, $($args)*)};
($self_ident:ident info, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::INFO, fields: $($k).+ = $($fields)*)};
($self_ident:ident info target: $target:expr, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::INFO, target: $target, fields: $($k).+ = $($fields)*)};
($self_ident:ident debug $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::DEBUG, $text)};
($self_ident:ident debug target: $target:expr, $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::DEBUG, target: $target, $text)};
($self_ident:ident debug $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::DEBUG, $fmt, $($args)*)};
($self_ident:ident debug target: $target:expr, $fmt:literal, $($arg:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::DEBUG, target: $target, $fmt, $($arg)*)};
($self_ident:ident debug, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::DEBUG, fields: $($k).+ = $($fields)*)};
($self_ident:ident debug target: $target:expr, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::DEBUG, target: $target, fields: $($k).+ = $($fields)*)};
($self_ident:ident trace $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::TRACE, $text)};
($self_ident:ident trace target: $target:expr, $text:expr) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::TRACE, target: $target, $text)};
($self_ident:ident trace $fmt:literal, $($arg:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::TRACE, $fmt, $($arg)*)};
($self_ident:ident trace target: $target:expr, $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::TRACE, target: $target, $fmt, $($args)*)};
($self_ident:ident trace, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::TRACE, fields: $($k).+ = $($fields)*)};
($self_ident:ident trace target: $target:expr, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "", level: $crate::Level::TRACE, target: $target, fields: $($k).+ = $($fields)*)};
($self_ident:ident debugwarn $text:expr) => {veilid_log_event!($self_ident, prefix: "DEBUGWARN: ", level: $crate::DEBUGWARN, $text)};
($self_ident:ident debugwarn target: $target:expr, $text:expr) => {veilid_log_event!($self_ident, prefix: "DEBUGWARN: ", level: $crate::DEBUGWARN, target: $target, $text)};
($self_ident:ident debugwarn $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "DEBUGWARN: ", level: $crate::DEBUGWARN, $fmt, $($args)*)};
($self_ident:ident debugwarn target: $target:expr, $fmt:expr, $($args:tt)*) => {veilid_log_event!($self_ident, prefix: "DEBUGWARN: ", level: $crate::DEBUGWARN, target: $target, $fmt, $($args)*)};
($self_ident:ident debugwarn, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "DEBUGWARN", level: $crate::DEBUGWARN, fields: $($k).+ = $($fields)*)};
($self_ident:ident debugwarn target: $target:expr, fields: $($k:ident).+ = $($fields:tt)*) => {veilid_log_event!($self_ident, prefix: "DEBUGWARN", level: $crate::DEBUGWARN, target: $target, fields: $($k).+ = $($fields)*)};
}
#[macro_export]
macro_rules! network_result_value_or_log {
($self:ident $r:expr => $f:expr) => {
network_result_value_or_log!($self target: self::__VEILID_LOG_FACILITY, $r => [ "" ] $f )
};
($self:ident $r:expr => [ $d:expr ] $f:expr) => {
network_result_value_or_log!($self target: self::__VEILID_LOG_FACILITY, $r => [ $d ] $f )
};
($self:ident target: $target:expr, $r:expr => $f:expr) => {
network_result_value_or_log!($self target: $target, $r => [ "" ] $f )
};
($self:ident target: $target:expr, $r:expr => [ $d:expr ] $f:expr) => { {
let __extra_message = if debug_target_enabled!("network_result") {
$d.to_string()
} else {
"".to_string()
};
match $r {
NetworkResult::Timeout => {
veilid_log!($self debug target: $target,
"{} at {}@{}:{} in {}{}",
"Timeout",
file!(),
line!(),
column!(),
fn_name::uninstantiated!(),
__extra_message
);
$f
}
NetworkResult::ServiceUnavailable(ref s) => {
veilid_log!($self debug target: $target,
"{}({}) at {}@{}:{} in {}{}",
"ServiceUnavailable",
s,
file!(),
line!(),
column!(),
fn_name::uninstantiated!(),
__extra_message
);
$f
}
NetworkResult::NoConnection(ref e) => {
veilid_log!($self debug target: $target,
"{}({}) at {}@{}:{} in {}{}",
"No connection",
e.to_string(),
file!(),
line!(),
column!(),
fn_name::uninstantiated!(),
__extra_message
);
$f
}
NetworkResult::AlreadyExists(ref e) => {
veilid_log!($self debug target: $target,
"{}({}) at {}@{}:{} in {}{}",
"Already exists",
e.to_string(),
file!(),
line!(),
column!(),
fn_name::uninstantiated!(),
__extra_message
);
$f
}
NetworkResult::InvalidMessage(ref s) => {
veilid_log!($self debug target: $target,
"{}({}) at {}@{}:{} in {}{}",
"Invalid message",
s,
file!(),
line!(),
column!(),
fn_name::uninstantiated!(),
__extra_message
);
$f
}
NetworkResult::Value(v) => v,
}
} };
}