#[macro_export] macro_rules! xr_resource_wrapper { ($wrapper_type:ident, $xr_type:ty) => { #[derive( Clone, bevy::prelude::Resource, bevy::prelude::Deref, bevy::prelude::DerefMut, bevy::render::extract_resource::ExtractResource, )] 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, bevy::prelude::Deref, bevy::prelude::DerefMut, bevy::render::extract_resource::ExtractResource, )] 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) } } }; } #[macro_export] macro_rules! xr_no_clone_resource_wrapper { ($wrapper_type:ident, $xr_type:ty) => { #[derive(bevy::prelude::Resource, bevy::prelude::Deref, bevy::prelude::DerefMut)] 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) } } }; } pub use xr_arc_resource_wrapper; pub use xr_no_clone_resource_wrapper; pub use xr_resource_wrapper;