diff options
Diffstat (limited to 'lib/src')
-rw-r--r-- | lib/src/lib.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/src/lib.rs b/lib/src/lib.rs index 4995eb6..b25f91e 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -41,6 +41,22 @@ pub trait GenerateRandom { fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self; } +/// Enable randomly generating values of an enum +/// with a predefined variant +/// +/// This trait is automatically implemented for enums +/// by the [`macro@GenerateRandom`] macro +pub trait GenerateRandomVariant { + /// Return number of variants + fn num_variants() -> usize; + + /// Return name of variant with index + fn variant_name(variant: usize) -> &'static str; + + /// Create a randomly generated value with a predefied variant + fn generate_random_variant<R: rand::Rng + ?Sized>(rng: &mut R, variant: usize) -> Self; +} + macro_rules! impl_generate_random { ( $( $t:ty, )+ ) => { $( |