use crate::wrappers::mj_editing::{
MjsJoint, MjsGeom, MjsSite, MjsCamera, MjsLight, MjsFlex, MjsMesh, MjsMaterial,
MjsPair, MjsEquality, MjsTendon, MjsActuator
};
use crate::error::MjEditError;
use crate::mujoco_c::*;
use super::traits::SpecItem;
macro_rules! default_accessor_wrapper {
($($name:ident),*) => {paste::paste! {
$(
#[doc = concat!("Returns an immutable reference to ", stringify!($name), "'s defaults.")]
pub fn $name(&self) -> &[<Mjs $name:camel>] {
unsafe { &*self.$name }
}
#[doc = concat!("Returns a mutable reference to ", stringify!($name), "'s defaults.")]
pub fn [<$name _mut>](&mut self) -> &mut [<Mjs $name:camel>] {
unsafe { &mut *self.$name }
}
)*
}};
}
pub type MjsDefault = mjsDefault;
impl MjsDefault {
default_accessor_wrapper! {
joint, geom, site, camera, light, flex, mesh, material,
pair, equality, tendon, actuator
}
}
impl super::traits::sealed::Sealed for MjsDefault {}
impl SpecItem for MjsDefault {
fn element_pointer(&self) -> *const mjsElement {
self.element
}
fn default(&self) -> &MjsDefault {
self
}
fn set_default(&mut self, _class_name: &str) -> Result<(), MjEditError> {
Err(MjEditError::UnsupportedOperation)
}
fn with_default(&mut self, _class_name: &str) -> Result<&mut Self, MjEditError> {
Err(MjEditError::UnsupportedOperation)
}
unsafe fn delete(&mut self) -> Result<(), MjEditError> {
Err(MjEditError::UnsupportedOperation)
}
}