Macro fixt::fixturator
source · [−]macro_rules! fixturator {
(
with_vec $min:literal $max:literal;
$type:tt;
$($munch:tt)*
) => { ... };
(
$type:tt;
variants [ $( $variant:tt($variant_inner:ty) )* ];
$($munch:tt)*
) => { ... };
(
$type:tt;
unit variants [ $( $variant:tt )* ] empty $empty:tt;
$($munch:tt)*
) => { ... };
(
$type:tt;
enum [ $( $variant:tt )* ];
$($munch:tt)*
) => { ... };
( $type:ident; from $from:ty; $($munch:tt)* ) => { ... };
( $type:ident; constructor fn $fn:tt( $( $newtype:ty ),* ); $($munch:tt)* ) => { ... };
( $type:ident; vanilla fn $fn:tt( $( $newtype:ty ),* ); $($munch:tt)* ) => { ... };
( $type:ident; curve $curve:ident $e:expr; $($munch:tt)* ) => { ... };
( $type:ident; $($munch:tt)* ) => { ... };
( $type:ident, $empty:expr, $unpredictable:expr, $predictable:expr ) => { ... };
}
Expand description
implements a FooFixturator for any type Foo
this simply wraps Fixturator<Foo, Curve> up as FooFixturator
this macro serves a few purposes:
- we avoid the orphan rule that would prevent us implementing Iterator on Fixturator directly
- we avoid the verbosity of type and impl juggling around every new FooFixturator
- we create a FooFixturator implementation that is compatible with basic_test! macro
- we cover all three basic curves
- we standardiize the new() and new_indexed() methods without relying on traits
the expressions passed into the macro are the body of the next calls for Empty, Unpredictable and Predictable, in order