Rand derive 2
Derive macro for generating random types with the rand
crate.
It will implement the rand::distributions::Standard
for a given type.
Usage
Check out the example crate or follow the instructions below.
- Add this to your Cargo.toml file:
[]
= "0.1"
= "0.7"
- Import the macro somewhere in your file where your type is:
use RandGen;
Alternatively, use this to global import the macro:
extern crate rand_derive2;
- Add the RandGen derive macro for your type:
- Generate your struct:
// Or like this
Customization
Note: all things that can be customized is covered in the example crate
Options
To make sure an option is never generated with None
, add the always_some
attribute on top of the property.
To make sure an option is never generated with Some
, add the always_none
attribute on top of the property.
Skip enum variant
If a variant should never be generated, add the skip_variant
attribute on the variant.
Custom value
If you want a custom value for one of the properties, add the custom_rand
attribute.
A trait is created called TestDataProviderFor$TYPE$.
This trait will require the user to provider the values.
No rand
Panic implementation of the property, making the type unable to be random generated.
Note: place #[allow(unreachable_code)]
above your type to omit compiler warnings.
Default_rand
Place default_rand
above a type to make it generate the default value.
How it works
Structs
It calls rng.gen()
on all the fields.
Enums
It will generate a random variant.
TODO
- Recursion for e.g. vec in vec
- More types from the standard library covered
- Functions documented
- Custom trait type/method names
- Weighted randomization (currently only supports
rand::distributions::Standard
)