summaryrefslogtreecommitdiff
path: root/src/log.rs
blob: 306a0d530521d5338e693b0898208b94df75b71e (plain)
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) {}
}