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<Curve>
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