]> git.lizzy.rs Git - generate-random.git/commitdiff
Support enumset
authorLizzy Fleckenstein <eliasfleckenstein@web.de>
Mon, 6 Feb 2023 18:29:45 +0000 (19:29 +0100)
committerLizzy Fleckenstein <eliasfleckenstein@web.de>
Mon, 6 Feb 2023 18:29:45 +0000 (19:29 +0100)
lib/Cargo.toml
lib/src/lib.rs

index f1b4b1015a4f03465690204f1a5251190e12a977..ddd300b93311ed93f181bafe8914562993cf7708 100644 (file)
@@ -14,6 +14,7 @@ keywords = ["random"]
 [dependencies]
 rand = "0.8.5"
 generate-random-macro = { version = "0.1.0", path = "../derive-macro" }
+enumset = { git = "https://github.com/Lymia/enumset", optional = true }
 
 [dev-dependencies]
 rand_chacha = "0.3.1"
index d0e96e30627138c48fa67e34f08201f1c3b65af9..f68b9f7d725d8db38379103be3cc24a7080db92b 100644 (file)
@@ -128,6 +128,16 @@ where
     }
 }
 
+#[cfg(feature = "enumset")]
+impl<T: enumset::EnumSetType + GenerateRandom> GenerateRandom for enumset::EnumSet<T> {
+    fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+        let max = enumset::EnumSet::<T>::variant_count() * 2;
+        let len = rng.gen_range(0..max);
+
+        (0..len).map(|_| T::generate_random(rng)).collect()
+    }
+}
+
 macro_rules! impl_generate_random_tuple {
        ( $t0:ident $( $t:ident )* ) => {
                impl< $t0, $( $t, )* > GenerateRandom for ( $t0, $( $t, )* )