#[macro_export]
macro_rules! map_on_integer_unsigned {
($($macro_arms:tt)*) => {
$crate::map_on!((u8, u16, u32, u64, usize), $($macro_arms)*);
};
}
#[macro_export]
macro_rules! map_on_integer_signed {
($($macro_arms:tt)*) => {
$crate::map_on!((i8, i16, i32, i64, isize), $($macro_arms)*);
};
}
#[macro_export]
macro_rules! map_on_integer
{
($($macro_arms:tt)*) => {
$crate::map_on_integer_unsigned!($($macro_arms)*);
$crate::map_on_integer_signed!($($macro_arms)*);
};
}
#[macro_export]
macro_rules! map_on_float
{
($($macro_arms:tt)*) => {
$crate::map_on!((f32, f64), $($macro_arms)*);
};
}
#[macro_export]
macro_rules! map_on_number
{
($($macro_arms:tt)*) => {
$crate::map_on_integer!($($macro_arms)*);
$crate::map_on_float!($($macro_arms)*);
};
}
#[macro_export]
macro_rules! map_on_number_and_bool
{
($($macro_arms:tt)*) => {
$crate::map_on_number!($($macro_arms)*);
$crate::map_on!((bool), $($macro_arms)*);
};
}
#[macro_export]
macro_rules! map_on_number_and_bool_and_char
{
($($macro_arms:tt)*) => {
$crate::map_on_number!($($macro_arms)*);
$crate::map_on!((bool, char), $($macro_arms)*);
};
}
#[macro_export]
macro_rules! map_on_operator_binary_arithmetic_unit {
($($macro_arms:tt)*) => {
$crate::map_on!
(
(
(Add, add),
(Sub, sub)
),
$($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_operator_binary_arithmetic {
($($macro_arms:tt)*) => {
$crate::map_on_operator_binary_arithmetic_unit!($($macro_arms)*);
$crate::map_on!
(
(
(Mul, mul),
(Div, div),
(Rem, rem)
),
$($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_operator_binary_bit {
($($macro_arms:tt)*) => {
$crate::map_on!
(
(
(BitOr, bitor),
(BitAnd, bitand),
(Shl, shl),
(Shr, shr)
),
$($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_operator_binary
{
($($macro_arms:tt)*) => {
$crate::map_on_operator_binary_arithmetic!($($macro_arms)*);
$crate::map_on_operator_binary_bit!($($macro_arms)*);
};
}
#[macro_export]
macro_rules! map_on_operator_assign_arithmetic_unit {
($($macro_arms:tt)*) => {
$crate::map_on!
(
(
(AddAssign, add_assign),
(SubAssign, sub_assign)
),
$($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_operator_assign_arithmetic {
($($macro_arms:tt)*) => {
$crate::map_on_operator_assign_arithmetic_unit!($($macro_arms)*);
$crate::map_on!
(
(
(MulAssign, mul_assign),
(DivAssign, div_assign),
(RemAssign, rem_assign)
),
$($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_operator_assign_bit {
($($macro_arms:tt)*) => {
$crate::map_on!
(
(
(BitOrAssign, bitor_assign),
(BitAndAssign, bitand_assign),
(ShlAssign, shl_assign),
(ShrAssign, shr_assign)
),
$($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_operator_assign
{
($($macro_arms:tt)*) => {
$crate::map_on_operator_assign_arithmetic!($($macro_arms)*);
$crate::map_on_operator_assign_bit!($($macro_arms)*);
};
}
#[macro_export]
macro_rules! map_on_std_fmt_without_debug {
($($macro_arms:tt)*) => {
$crate::map_on!(
(
Display,
Octal,
LowerHex,
UpperHex,
Pointer,
Binary,
LowerExp,
UpperExp
),
$($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_std_fmt {
($($macro_arms:tt)*) => {
$crate::map_on_std_fmt_without_debug!($($macro_arms)*);
$crate::map_on!((Debug), $($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_operator_unary_bit
{
($($macro_arms:tt)*) => {
$crate::map_on!
(
(
(Not, not)
),
$($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_operator_unary_arithmetic_unit
{
($($macro_arms:tt)*) => {
$crate::map_on!
(
(
(Neg, neg),
(Abs, abs)
),
$($macro_arms)*
);
};
}
#[macro_export]
macro_rules! map_on_operator_unary
{
($($macro_arms:tt)*) => {
$crate::map_on_operator_unary_bit!($($macro_arms)*);
$crate::map_on_operator_unary_arithmetic_unit!($($macro_arms)*);
};
}