#![allow(dead_code, unused_macros)]
macro_rules! log {
($($tt:tt)*) => {
#[cfg(feature = "logging")]
{
$($tt)*
}
}
}
macro_rules! error {
($($tt:tt)*) => { log!(log::error!($($tt)*)) }
}
macro_rules! warn {
($($tt:tt)*) => { log!(log::warn!($($tt)*)) }
}
macro_rules! info {
($($tt:tt)*) => { log!(log::info!($($tt)*)) }
}
macro_rules! debug {
($($tt:tt)*) => { log!(log::debug!($($tt)*)) }
}
macro_rules! trace {
($($tt:tt)*) => { log!(log::trace!($($tt)*)) }
}
#[cfg(feature = "std")]
macro_rules! dbg {
() => {
std::eprintln!(
"[{}:{}:{}]",
$crate::file!(),
$crate::line!(),
$crate::column!(),
)
};
($val:expr $(,)?) => {
match $val {
tmp => {
std::eprintln!(
"[{}:{}:{}] {} = {:?}",
std::file!(),
std::line!(),
std::column!(),
std::stringify!($val),
&tmp,
);
tmp
}
}
};
($($val:expr),+ $(,)?) => {
($(dbg!($val)),+,)
};
}
#[cfg(all(test))]
#[derive(Debug)]
pub(crate) struct Logger(());
#[cfg(all(test, feature = "std", feature = "logging"))]
const LOGGER: &'static Logger = &Logger(());
#[cfg(all(test))]
impl Logger {
pub(crate) fn init() -> Result<(), log::SetLoggerError> {
#[cfg(all(feature = "std", feature = "logging"))]
{
log::set_logger(LOGGER)?;
log::set_max_level(log::LevelFilter::Trace);
Ok(())
}
#[cfg(not(all(feature = "std", feature = "logging")))]
{
Ok(())
}
}
}
#[cfg(all(test, feature = "std", feature = "logging"))]
impl log::Log for Logger {
fn enabled(&self, _: &log::Metadata<'_>) -> bool {
true
}
fn log(&self, record: &log::Record<'_>) {
match (record.file(), record.line()) {
(Some(file), Some(line)) => {
std::eprintln!(
"{}|{}|{}:{}: {}",
record.level(),
record.target(),
file,
line,
record.args()
);
}
(Some(file), None) => {
std::eprintln!(
"{}|{}|{}: {}",
record.level(),
record.target(),
file,
record.args()
);
}
_ => {
std::eprintln!(
"{}|{}: {}",
record.level(),
record.target(),
record.args()
);
}
}
}
fn flush(&self) {
}
}