pub use inner::*;
#[cfg(not(feature = "debug"))]
mod inner {
#[inline(always)]
pub fn init_logging() {}
#[inline(always)]
pub fn enabled() -> bool {
false
}
#[inline(always)]
pub fn log(_: String) {}
#[inline(always)]
pub fn store_artifact(_: impl AsRef<str>, _: impl AsRef<[u8]>) {}
}
#[cfg(feature = "debug")]
mod inner {
use lazy_static::lazy_static;
use crate::sys;
lazy_static! {
static ref DEBUG_ENABLED: bool = unsafe { sys::debug::enabled().unwrap() >= 0 };
}
#[inline]
pub fn log(msg: String) {
unsafe {
sys::debug::log(msg.as_ptr(), msg.len() as u32).unwrap();
}
}
pub fn init_logging() {
if enabled() {
log::set_logger(&Logger).expect("failed to enable logging");
log::set_max_level(log::LevelFilter::Trace);
}
}
pub fn store_artifact(name: impl AsRef<str>, data: impl AsRef<[u8]>) {
let name = name.as_ref();
let data = data.as_ref();
unsafe {
sys::debug::store_artifact(
name.as_ptr(),
name.len() as u32,
data.as_ptr(),
data.len() as u32,
)
.unwrap();
}
}
#[inline(always)]
pub fn enabled() -> bool {
*DEBUG_ENABLED
}
struct Logger;
impl log::Log for Logger {
fn enabled(&self, _: &log::Metadata) -> bool {
enabled()
}
fn log(&self, record: &log::Record) {
if enabled() {
log(format!("[{}] {}", record.level(), record.args()));
}
}
fn flush(&self) {}
}
}