bevy-hara-utils 0.1.6

Opinionated set of utilities
#[macro_export]
macro_rules! tuple_comp {
    ($ident:ident, $ty:ty, default($default:expr), copy$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, $ty, default($default)$(, $($tt)*)?, derives(Copy));
    };

    ($ident:ident, $ty:ty, default($default:expr), eq$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, $ty, default($default)$(, $($tt)*)?, derives(PartialEq, Eq));
    };

    ($ident:ident, $ty:ty, default($default:expr), ord$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, $ty, default($default)$(, $($tt)*)?,eq, derives(PartialOrd, Ord));
    };

    ($ident:ident, $ty:ty, default($default:expr), hash$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, $ty, default($default)$(, $($tt)*)?, derives(Hash));
    };

    ($ident:ident, $ty:ty, default($default:expr), derives($($derive_a:ident),*), derives($($derive_b:ident),*)$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, $ty, default($default), derives($($derive_a),*, $($derive_b),*));
    };

    ($ident:ident, $ty:ty, default($default:expr), derives($($derive:ident),*)) => {
        #[derive($($derive),*)]
        #[derive(::bevy::prelude::Component)]
        pub struct $ident(pub $ty);
    };

    ($ident:ident, $ty:ty$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, $ty, default(Default::default())$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! marker {
    ($ident:ident) => {
        #[derive(
            Debug,
            Clone,
            Copy,
            PartialEq,
            Eq,
            PartialOrd,
            Ord,
            Hash,
            Default,
            ::bevy::prelude::Component,
        )]
        pub struct $ident;
    };

    ($ident:ident, named) => {
        #[derive(
            Debug,
            Clone,
            Copy,
            PartialEq,
            Eq,
            PartialOrd,
            Ord,
            Hash,
            Default,
            ::bevy::prelude::Component,
        )]
        #[require(::bevy::prelude::Name(stringify!($ident).into()))]
        pub struct $ident;
    };
}

pub use crate::marker;
pub use crate::tuple_comp;

#[macro_export]
macro_rules! u8_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, u8$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! u16_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, u16$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! u32_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, u32$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! u64_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, u64$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! i8_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, i8$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! i16_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, i16$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! i32_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, i32$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! i64_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, i64$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! f32_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, f32$(, $($tt)*)?);
    };
}

#[macro_export]
macro_rules! f64_component {
    ($ident:ident$(, $($tt:tt)*)?) => {
        tuple_comp!($ident, f64$(, $($tt)*)?);
    };
}

pub use crate::{
    f32_component, f64_component, i8_component, i16_component, i32_component, i64_component,
    u8_component, u16_component, u32_component, u64_component,
};