diff options
author | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-10 14:37:14 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-10 15:01:05 +0100 |
commit | c966137cc4b64855f109f7b0eae3327d198b1f1d (patch) | |
tree | 2d8353ea1a0e04934e23f960988658a2bc3e65a5 /lib/src/lib.rs | |
parent | 8dceb474a5a7991dafeb1b9c846244c71ca33301 (diff) | |
download | generate-random-c966137cc4b64855f109f7b0eae3327d198b1f1d.tar.xz |
Add trait to generate random enum with fixed variant
Diffstat (limited to 'lib/src/lib.rs')
-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, )+ ) => { $( |