aboutsummaryrefslogtreecommitdiff
path: root/lib/src/lib.rs
diff options
context:
space:
mode:
authorLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-10 14:37:14 +0100
committerLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-10 15:01:05 +0100
commitc966137cc4b64855f109f7b0eae3327d198b1f1d (patch)
tree2d8353ea1a0e04934e23f960988658a2bc3e65a5 /lib/src/lib.rs
parent8dceb474a5a7991dafeb1b9c846244c71ca33301 (diff)
downloadgenerate-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.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, )+ ) => {
$(