use std::ffi::c_char;
use std::ffi::CStr;
use xplane_sys::XPLMSetErrorCallback;
use crate::{make_x, XPAPI};
static mut HANDLER: Option<fn(&str)> = None;
pub fn set_error_handler(_x: &mut XPAPI, handler: fn(&str)) {
unsafe {
HANDLER = Some(handler);
XPLMSetErrorCallback(Some(error_handler));
}
}
unsafe extern "C-unwind" fn error_handler(message: *const c_char) {
let message_cs = unsafe { CStr::from_ptr(message) };
if let Ok(message_str) = message_cs.to_str() {
if let Some(handler) = unsafe { HANDLER } {
handler(message_str);
}
} else {
let mut x = make_x();
super::debugln!(x, "[xplm] Error handler called with an invalid message").unwrap();
}
}