wiwi/macro_util/
macro_recurse.rs#[macro_export]
macro_rules! macro_recurse {
($($stuff:tt)*) => {
$crate::macro_util::__macro_recurse_impl! { $($stuff)* }
}
}
pub use macro_recurse;
#[doc(hidden)]
#[macro_export]
macro_rules! __macro_recurse_impl {
{
$macro:ident
{ $($stuff:tt)* }
{ $($idents:ident)* }
} => {
$crate::macro_util::__macro_recurse_impl! {
@impl
$macro
{ $($stuff)* }
[$($idents)*] []
}
};
{
@exclude_zero
$macro:ident
{ $($stuff:tt)* }
{ $first:ident $($idents:ident)* }
} => {
$crate::macro_util::__macro_recurse_impl! {
@impl
$macro
{ $($stuff)* }
[$($idents)*] [$first]
}
};
{
@impl
$macro:ident
{ $($stuff:tt)* }
[$next:ident $($remaining:ident)*] [$($rest:ident)*]
} => {
$macro! {
@wiwi_macro_recurse
{ $($stuff)* }
{ $($rest)* }
}
$crate::macro_util::__macro_recurse_impl! {
@impl
$macro
{ $($stuff)* }
[$($remaining)*] [$($rest)* $next]
}
};
{
@impl
$macro:ident
{ $($stuff:tt)* }
[] [$($rest:ident)*]
} => {
$macro! {
@wiwi_macro_recurse
{ $($stuff)* }
{ $($rest)* }
}
};
}
#[doc(hidden)]
pub use __macro_recurse_impl;