pub fn mju_error(msg: impl Into<String>) -> ! {
let msg = std::ffi::CString::new(msg.into()).expect("Error message must be valid UTF-8");
unsafe { crate::bindgen::mju_error(msg.as_ptr()) }
unreachable!()
}
pub fn mju_warning(msg: impl Into<String>) -> ! {
let msg = std::ffi::CString::new(msg.into()).expect("Warning message must be valid UTF-8");
unsafe { crate::bindgen::mju_warning(msg.as_ptr()) }
unreachable!()
}
pub fn mju_clearHandlers() {
unsafe { crate::bindgen::mju_clearHandlers() }
}
pub fn mju_malloc(size: usize) -> *mut u8 {
unsafe { crate::bindgen::mju_malloc(size) as *mut u8 }
}
pub fn mju_free(ptr: *mut u8) {
unsafe { crate::bindgen::mju_free(ptr as *mut std::ffi::c_void) }
}
pub fn mj_warning(
d: &mut crate::mjData,
warning: crate::bindgen::mjtWarning,
info: usize,
) {
unsafe { crate::bindgen::mj_warning(d.as_mut_ptr(), warning.0 as i32, info as i32) }
}
pub fn mju_writeLog(kind: impl Into<String>, msg: impl Into<String>) {
let kind = std::ffi::CString::new(kind.into()).expect("Log kind must be valid UTF-8");
let msg = std::ffi::CString::new(msg.into()).expect("Log message must be valid UTF-8");
unsafe { crate::bindgen::mju_writeLog(kind.as_ptr(), msg.as_ptr()) }
}
pub fn mjs_getError(s: &mut crate::mjSpec) -> Option<String> {
let c_ptr = unsafe { crate::bindgen::mjs_getError(s.as_mut_ptr()) };
if c_ptr.is_null() {
None
} else {
Some(unsafe { std::ffi::CStr::from_ptr(c_ptr).to_str().unwrap().to_owned() })
}
}
pub fn mjs_isWarning(s: &mut crate::mjSpec) -> bool {
unsafe { crate::bindgen::mjs_isWarning(s.as_mut_ptr()) == 1 }
}