#![no_std]
#[macro_export]
macro_rules! map_on {
( ($type_name:tt), $mac:ident $(, $args:tt)* ) => {
$mac!($type_name $(, $args)*);
};
( ($first_type:tt, $($rest_type:tt),+), $mac:ident $(, $args:tt)* ) => {
map_on!(($first_type), $mac $(, $args)*);
map_on!(($($rest_type),+), $mac $(, $args)*);
};
}
#[macro_export]
macro_rules! map_on_integer_signed {
($mac:ident $(, $args:tt)* ) => {
$crate::map_on!((i8, i16, i32, i64, isize), $mac $(, $args)*);
};
}
#[macro_export]
macro_rules! map_on_integer_unsigned {
($mac:ident $(, $args:tt)* ) => {
$crate::map_on!((u8, u16, u32, u64, usize), $mac $(, $args)*);
};
}
#[macro_export]
macro_rules! map_on_integer
{
($mac:ident $(, $args:tt)* ) => {
$crate::map_on_integer_signed!($mac $(, $args)*);
$crate::map_on_integer_unsigned!($mac $(, $args)*);
};
}
#[macro_export]
macro_rules! map_on_float
{
($mac:ident $(, $args:tt)* ) => {
$crate::map_on!((f32, f64), $mac $(, $args)*);
};
}
#[macro_export]
macro_rules! map_on_number
{
($mac:ident $(, $args:tt)* ) => {
$crate::map_on_integer!($mac $(, $args)*);
$crate::map_on_float!($mac $(, $args)*);
};
}
#[macro_export]
macro_rules! map_on_number_and_bool
{
($mac:ident $(, $args:tt)* ) => {
$crate::map_on_number!($mac $(, $args)*);
$crate::map_on!((bool), $mac $(, $args)*);
};
}