1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#[macro_export]
macro_rules! write_error_log {
    ($writer:expr) => {
        extern "C" {
            fn set_error_log(p: *const u8, len: i32);
        }

        let log = serde_json::json!({
            "crate": std::env!("CARGO_CRATE_NAME"),
            "message": &$writer
        });
        let log = serde_json::to_vec(&log).unwrap_or_default();
        unsafe {
            set_error_log(log.as_ptr(), log.len() as i32);
        }
    };
}