]> git.lizzy.rs Git - generate-random.git/commitdiff
Support arrays
authorLizzy Fleckenstein <eliasfleckenstein@web.de>
Sun, 5 Feb 2023 18:20:16 +0000 (19:20 +0100)
committerLizzy Fleckenstein <eliasfleckenstein@web.de>
Mon, 6 Feb 2023 15:50:23 +0000 (16:50 +0100)
lib/src/lib.rs

index e954eb47a0724bf886083797d9d227efd76aea79..ed76cba9c2fccd96b5336ccefd9c5919bf122672 100644 (file)
@@ -82,6 +82,23 @@ impl<T: GenerateRandom> GenerateRandom for Option<T> {
     }
 }
 
+impl<T: GenerateRandom, const N: usize> GenerateRandom for [T; N] {
+    fn generate_random<R: rand::Rng + ?Sized>(rng: &mut R) -> Self {
+        use core::mem::MaybeUninit;
+
+        let mut arr: [MaybeUninit<T>; N] = unsafe { MaybeUninit::uninit().assume_init() };
+
+        for elem in arr.iter_mut() {
+            *elem = MaybeUninit::new(T::generate_random(rng));
+        }
+
+        let ret = unsafe { std::mem::transmute_copy(&arr) };
+        std::mem::forget(arr);
+
+        ret
+    }
+}
+
 macro_rules! impl_generate_random_tuple {
        ( $t0:ident $( $t:ident )* ) => {
                impl< $t0, $( $t, )* > GenerateRandom for ( $t0, $( $t, )* )