rinia 0.0.8

Portable scalar abstractions for game and simulation math.
Documentation
#[cfg(feature = "bytemuck")]
#[macro_export]
macro_rules! impl_bytemuck_pod {
    ($wrapper:ident<$ty:ident>) => {
        unsafe impl<$ty> ::bytemuck::Zeroable for $wrapper<$ty> where $ty: ::bytemuck::Zeroable {}

        unsafe impl<$ty> ::bytemuck::Pod for $wrapper<$ty> where $ty: ::bytemuck::Pod {}
    };

    ($wrapper:ident<$ty:ident : $bound:path>) => {
        unsafe impl<$ty> ::bytemuck::Zeroable for $wrapper<$ty> where
            $ty: $bound + ::bytemuck::Zeroable
        {
        }

        unsafe impl<$ty> ::bytemuck::Pod for $wrapper<$ty> where $ty: $bound + ::bytemuck::Pod {}
    };

    ($wrapper:ident) => {
        unsafe impl ::bytemuck::Zeroable for $wrapper {}

        unsafe impl ::bytemuck::Pod for $wrapper {}
    };
}

#[cfg(not(feature = "bytemuck"))]
#[macro_export]
macro_rules! impl_bytemuck_pod {
    ($wrapper:ident<$ty:ident>) => {};
    ($wrapper:ident<$ty:ident : $bound:path>) => {};
    ($wrapper:ident) => {};
}

#[cfg(feature = "bytemuck")]
#[macro_export]
macro_rules! impl_bytemuck_transparent {
    ($wrapper:ident<$ty:ident>, $repr:ty) => {
        $crate::impl_bytemuck_pod!($wrapper<$ty>);

        unsafe impl<$ty> ::bytemuck::TransparentWrapper<$repr>
            for $wrapper<$ty>
        {
        }
    };

    ($wrapper:ident<$ty:ident : $bound:path>, $repr:ty) => {
        $crate::impl_bytemuck_pod!($wrapper<$ty: $bound>);

        unsafe impl<$ty> ::bytemuck::TransparentWrapper<$repr>
            for $wrapper<$ty>
        where
            $ty: $bound,
        {
        }
    };

    ($wrapper:ident, $repr:ty) => {
        $crate::impl_bytemuck_pod!($wrapper);

        unsafe impl ::bytemuck::TransparentWrapper<$repr> for $wrapper {}
    };
}

#[cfg(not(feature = "bytemuck"))]
#[macro_export]
macro_rules! impl_bytemuck_transparent {
    ($wrapper:ident<$ty:ident>, $repr:ty) => {};
    ($wrapper:ident<$ty:ident : $bound:path>, $repr:ty) => {};
    ($wrapper:ident, $repr:ty) => {};
}