#[macro_export] macro_rules! xr_resource_wrapper { ($wrapper_type:ident, $xr_type:ty) => { #[derive(Clone, bevy::prelude::Resource)] pub struct $wrapper_type($xr_type); impl $wrapper_type { pub fn new(value: $xr_type) -> Self { Self(value) } } impl std::ops::Deref for $wrapper_type { type Target = $xr_type; fn deref(&self) -> &Self::Target { &self.0 } } impl From<$xr_type> for $wrapper_type { fn from(value: $xr_type) -> Self { Self::new(value) } } } } #[macro_export] macro_rules! xr_arc_resource_wrapper { ($wrapper_type:ident, $xr_type:ty) => { #[derive(Clone, bevy::prelude::Resource)] pub struct $wrapper_type(std::sync::Arc<$xr_type>); impl $wrapper_type { pub fn new(value: $xr_type) -> Self { Self(std::sync::Arc::new(value)) } } impl std::ops::Deref for $wrapper_type { type Target = $xr_type; fn deref(&self) -> &Self::Target { self.0.as_ref() } } impl From<$xr_type> for $wrapper_type { fn from(value: $xr_type) -> Self { Self::new(value) } } } } pub use xr_resource_wrapper; pub use xr_arc_resource_wrapper;