// TODO: Add a logger api with logger levels and various outputs use log::{Level, SetLoggerError}; pub fn init() -> Result<(), SetLoggerError> { log::set_logger(&crate::logger::Logger)?; log::set_max_level(log::LevelFilter::Debug); Ok(()) } struct Logger; impl log::Log for Logger { fn enabled(&self, _metadata: &log::Metadata) -> bool { true } fn log(&self, record: &log::Record) { let lvl = record.level(); crate::arch::log(format_args!( "\x1b[38;5;{}m{lvl}\x1b[0m [{}]: {}\r\n", match lvl { Level::Error => "160", Level::Warn => "172", Level::Info => "47", Level::Debug => "25", Level::Trace => "103", }, record.module_path().unwrap_or_default(), record.args(), )) .expect("write to serial console"); } fn flush(&self) {} }