use alloc::string::ToString; use log::{LevelFilter, Log, Metadata, Record, SetLoggerError, set_logger, set_max_level}; mod tortuise { use log::Level; #[link(wasm_import_module = "tortuise")] unsafe extern "C" { pub unsafe fn log(severity: Level, message: *const u8, length: usize); } } static LOG: TortuiseLogger = TortuiseLogger; pub struct TortuiseLogger; impl TortuiseLogger { pub fn init() -> Result<(), SetLoggerError> { set_logger(&LOG).map(|()| set_max_level(LevelFilter::Trace)) } } impl Log for TortuiseLogger { fn enabled(&self, _: &Metadata) -> bool { true } fn log(&self, record: &Record) { let message = record.args().to_string(); unsafe { tortuise::log(record.level(), message.as_ptr(), message.len()); } } fn flush(&self) {} }