bevy_oxr 0.3.0

Community crate for OpenXR in Bevy
Documentation
#[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_resource_wrapper_copy {
    ($wrapper_type:ident, $xr_type:ty) => {
        #[derive(
            Clone,
            Copy,
            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;