pub( crate ) mod private
{
#[ macro_export ]
macro_rules! index
{
() => { };
(
$Name : ident as $Alias : ident,
$( , $( $Rest : tt )* )?
)
=>
{
$Name!( as $Alias );
$crate::index!( $( $( $Rest )* )? );
};
(
$Name : ident
$( , $( $Rest : tt )* )?
)
=>
{
$Name!();
$crate::index!( $( $( $Rest )* )? );
};
}
#[ macro_export ]
macro_rules! impls1
{
() => {};
(
$( #[ $Meta : meta ] )*
$Vis : vis
fn $Name : ident
$( $Rest : tt )*
)
=>
{
$crate::impls1!
{
@DefineFn
@Meta{ $( #[ $Meta ] )* }
@Vis{ $Vis }
@Name{ $Name }
@Rest
$( #[ $Meta ] )*
$Vis fn $Name
$( $Rest )*
}
};
(
@DefineFn
@Meta{ $( #[ $Meta : meta ] )* }
@Vis{ $Vis : vis }
@Name{ $Name : ident }
@Rest
$Item : item
$( $Rest : tt )*
)
=>
{
#[ deny( unused_macros ) ]
macro_rules! $Name
{
() =>
{
$Item
};
}
$crate::impls1!
{
$( $Rest )*
}
};
}
#[ macro_export ]
macro_rules! impls_optional
{
() => {};
(
$( #[ $Meta : meta ] )*
$Vis : vis
fn $Name : ident
$( $Rest : tt )*
)
=>
{
$crate::impls_optional!
{
@DefineFn
@Meta{ $( #[ $Meta ] )* }
@Vis{ $Vis }
@Name{ $Name }
@Rest
$( #[ $Meta ] )*
$Vis fn $Name
$( $Rest )*
}
};
(
@DefineFn
@Meta{ $( #[ $Meta : meta ] )* }
@Vis{ $Vis : vis }
@Name{ $Name : ident }
@Rest
$Item : item
$( $Rest : tt )*
)
=>
{
#[ allow( unused_macros ) ]
macro_rules! $Name
{
() =>
{
$Item
};
}
$crate::impls_optional!
{
$( $Rest )*
}
};
}
#[ macro_export ]
macro_rules! tests_impls
{
() => {};
(
$( #[ $Meta : meta ] )*
$Vis : vis
fn $Name : ident
$( $Rest : tt )*
)
=>
{
$crate::tests_impls!
{
@DefineFn
@Meta{ $( #[ $Meta ] )* }
@Vis{ $Vis }
@Name{ $Name }
@Rest
$( #[ $Meta ] )*
$Vis fn $Name
$( $Rest )*
}
};
(
@DefineFn
@Meta{ $( #[ $Meta : meta ] )* }
@Vis{ $Vis : vis }
@Name{ $Name : ident }
@Rest
$Item : item
$( $Rest : tt )*
)
=>
{
#[ deny( unused_macros ) ]
macro_rules! $Name
{
() =>
{
#[ test ]
$Item
};
}
$crate::tests_impls!
{
$( $Rest )*
}
};
}
#[ macro_export ]
macro_rules! tests_impls_optional
{
() => {};
(
$( #[ $Meta : meta ] )*
$Vis : vis
fn $Name : ident
$( $Rest : tt )*
)
=>
{
$crate::tests_impls_optional!
{
@DefineFn
@Meta{ $( #[ $Meta ] )* }
@Vis{ $Vis }
@Name{ $Name }
@Rest
$( #[ $Meta ] )*
$Vis fn $Name
$( $Rest )*
}
};
(
@DefineFn
@Meta{ $( #[ $Meta : meta ] )* }
@Vis{ $Vis : vis }
@Name{ $Name : ident }
@Rest
$Item : item
$( $Rest : tt )*
)
=>
{
#[ allow( unused_macros ) ]
macro_rules! $Name
{
() =>
{
#[ test ]
$Item
};
}
$crate::tests_impls_optional!
{
$( $Rest )*
}
};
}
#[ macro_export ]
macro_rules! impls2
{
(
$( $Rest : tt )*
)
=>
{
$crate::fns!
{
@Callback { $crate::_impls_callback }
@Fns { $( $Rest )* }
}
};
}
#[ macro_export ]
macro_rules! _impls_callback
{
(
$( #[ $Meta : meta ] )*
$Vis : vis
fn $Name : ident
$( $Rest : tt )*
) =>
{
#[ deny( unused_macros ) ]
macro_rules! $Name
{
( as $Name2 : ident ) =>
{
$crate::fn_rename!{ @Name { $Name2 } @Fn
{
$( #[ $Meta ] )*
$Vis
fn $Name
$( $Rest )*
}}
};
() =>
{
$( #[ $Meta ] )*
$Vis
fn $Name
$( $Rest )*
};
}
};
}
pub use index;
pub use index as tests_index;
pub use impls1;
pub use impls_optional;
pub use tests_impls;
pub use tests_impls_optional;
pub use impls2;
pub use _impls_callback;
}
pub mod exposed
{
#[ doc( inline ) ]
pub use super::prelude::*;
}
pub use exposed::*;
pub mod prelude
{
#[ doc( inline ) ]
pub use super::private::
{
index,
tests_index,
impls1,
tests_impls,
tests_impls_optional,
impls2,
_impls_callback,
};
pub use ::impls_index_meta::impls3;
pub use impls1 as impls;
}