use crate::builder;
use crate::level::Level;
use crate::record;
use crate::thread_buf::with_thread_buf;
use crate::timestamp;
const _: () = assert!(record::BASE_RECORD_SIZE == 41);
#[doc(hidden)]
#[inline(always)]
pub fn enabled(level: Level) -> bool {
builder::level_enabled(level)
}
#[doc(hidden)]
#[inline(always)]
pub fn dispatch(
level: Level,
fmt: &'static str,
file: &'static str,
line: u32,
n_args: u8,
total_size: usize,
write_args: impl FnOnce(&mut [u8]),
) {
if total_size > record::MAX_RECORD_SIZE {
return;
}
let timestamp = timestamp::raw_timestamp();
let policy = builder::backpressure();
with_thread_buf(|tb| {
record::assemble(
&mut tb.scratch,
level,
timestamp,
fmt,
file,
line,
n_args,
total_size,
write_args,
);
tb.ring.write_record(&tb.scratch, policy);
});
}
#[doc(hidden)]
#[macro_export]
macro_rules! __ticklog_log {
($level:expr, $fmt:literal $(,)?) => {{
const _: () = $crate::__private::check_fmt($fmt, 0);
if $crate::__private::enabled($level) {
const __TOTAL: usize = 41;
$crate::__private::dispatch(
$level, $fmt, file!(), line!(), 0u8, __TOTAL,
|_buf| {},
);
}
}};
($level:expr, $fmt:literal, $($arg:expr),+ $(,)?) => {{
const _: () = $crate::__private::check_fmt(
$fmt,
<[&str]>::len(&[$(stringify!($arg)),*]),
);
if $crate::__private::enabled($level) {
const __N_ARGS: u8 =
<[&str]>::len(&[$(stringify!($arg)),*]) as u8;
const __BASE: usize = 41;
let __args = $crate::__ticklog_cons!($($arg),+);
let __total_size: usize = __BASE
.wrapping_add(__N_ARGS as usize)
.wrapping_add($crate::__private::LoggableArgs::args_encoded_size(&__args));
$crate::__private::dispatch(
$level, $fmt, file!(), line!(), __N_ARGS, __total_size,
|__buf: &mut [u8]| {
let mut __tag: usize = 0;
let mut __pay: usize = __N_ARGS as usize;
$crate::__private::LoggableArgs::write_args(
&__args, __buf, &mut __tag, &mut __pay,
);
},
);
}
}};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __ticklog_cons {
() => { () };
($head:expr $(, $tail:expr)*) => {
(&$head, $crate::__ticklog_cons!($($tail),*))
};
}
#[macro_export]
macro_rules! trace {
($($arg:tt)*) => { $crate::__ticklog_log!($crate::Level::Trace, $($arg)*) };
}
#[macro_export]
macro_rules! debug {
($($arg:tt)*) => { $crate::__ticklog_log!($crate::Level::Debug, $($arg)*) };
}
#[macro_export]
macro_rules! info {
($($arg:tt)*) => { $crate::__ticklog_log!($crate::Level::Info, $($arg)*) };
}
#[macro_export]
macro_rules! warn {
($($arg:tt)*) => { $crate::__ticklog_log!($crate::Level::Warn, $($arg)*) };
}
#[macro_export]
macro_rules! error {
($($arg:tt)*) => { $crate::__ticklog_log!($crate::Level::Error, $($arg)*) };
}