use crate::{mjSpec, mjsElement, mjsBody, mjsDefault};
pub fn mjs_attach<'element>(
parent: &'element mut mjsElement,
child: &'element mjsElement,
prefix: Option<&str>,
suffix: Option<&str>,
) -> Option<&'element mut mjsElement> {
let prefix_cstr = prefix.map(|s| std::ffi::CString::new(s).unwrap());
let suffix_cstr = suffix.map(|s| std::ffi::CString::new(s).unwrap());
let c_ptr = unsafe {
crate::bindgen::mjs_attach(
parent,
child,
prefix_cstr.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()),
suffix_cstr.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()),
)
};
if c_ptr.is_null() {None} else {Some(unsafe { &mut *c_ptr })}
}
pub fn mjs_detachBody(s: &mut mjSpec, b: &mut mjsBody) -> Result<(), ()> {
if unsafe { crate::bindgen::mjs_delete(s.as_mut_ptr(), b.element) } == 0 {Ok(())} else {Err(())}
}
pub fn mjs_detachDefault(s: &mut mjSpec, d: &mut mjsDefault) -> Result<(), ()> {
if unsafe { crate::bindgen::mjs_delete(s.as_mut_ptr(), d.element) } == 0 {Ok(())} else {Err(())}
}