Creates a simple way to generate enums that use the strum way of iterating
https://docs.rs/strum/0.18.0/strum/
iterates over all the variants (Predictable) or selects random variants (Unpredictable)
You do still need to BYO “empty” variant as the macro doesn’t know what to use there
tiny convenience macro to make it easy to get the first Foo from its fixturator without using
the iterator interface to save a little typing
c.f. fixt!(Foo) vs. FooFixturator::new(Unpredictable).next().unwrap();
represents a curve over the empty value(s)
the concept of “empty” is as slippery as it is of dubious value
how many countless hours and bugs have we lost over deciding what “is” and what “isn’t”?
i’m looking at you, JS and PHP -_-
the Fixturator is the struct that we wrap in our FooFixturator newtypes to impl Iterator over
each combination of Item and Curve needs its own Iterator implementation for Fixturator
Item is the Foo type of FooFixturator, i.e. the type of thing we are generating examples of
Curve represents some algorithm capable of generating fixtures
the Item is PhantomData because it simply represents a type to output
the Curve must be provided when the Fixturator is constructed to allow for paramaterized curves
this is most easily handled in most cases with the fixturator! and newtype_fixturator! macros