use bytemuck::Zeroable;
use wasefire_applet_api::debug as api;
pub use wasefire_applet_api::debug::Perf;
use wasefire_error::Error;
use crate::{convert, convert_unit};
pub fn println(msg: &str) {
if ENABLED {
let params = api::println::Params { ptr: msg.as_ptr(), len: msg.len() };
convert_unit(unsafe { api::println(params) }).unwrap();
}
}
pub fn time() -> Result<u64, Error> {
let mut result: u64 = 0;
let params = api::time::Params { ptr: &mut result as *mut _ };
convert(unsafe { api::time(params) }).map(|_| result)
}
pub fn perf() -> Perf {
let mut result = Perf::zeroed();
let params = api::perf::Params { ptr: &mut result as *mut Perf as *mut u8 };
convert_unit(unsafe { api::perf(params) }).unwrap();
result
}
pub const ENABLED: bool = option_env!("WASEFIRE_DEBUG").is_some();
#[macro_export]
macro_rules! debug {
($($args:tt)*) => {
if $crate::debug::ENABLED {
$crate::debug::println(&alloc::format!($($args)*));
}
};
}