diff options
Diffstat (limited to 'src/log.rs')
| -rw-r--r-- | src/log.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/log.rs b/src/log.rs new file mode 100644 index 0000000..306a0d5 --- /dev/null +++ b/src/log.rs @@ -0,0 +1,36 @@ +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) {} +} |
