aboutsummaryrefslogtreecommitdiff
path: root/lib/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/src/lib.rs')
-rw-r--r--lib/src/lib.rs16
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, )+ ) => {
$(