1extern crate rand;
2use rand::prelude::*;
3
4pub trait SampleRNG {
9 type Item;
10 fn sample(&self, n: usize) -> Vec<Self::Item>;
11}
12
13impl SampleRNG for Vec<usize> {
14 type Item = usize;
15 fn sample(&self, n: usize) -> Vec<Self::Item> {
16 let mut rng = rand::rng();
17 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
18 }
19}
20
21impl SampleRNG for Vec<u32> {
22 type Item = u32;
23 fn sample(&self, n: usize) -> Vec<Self::Item> {
24 let mut rng = rand::rng();
25 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
26 }
27}
28
29impl SampleRNG for Vec<u64> {
30 type Item = u64;
31 fn sample(&self, n: usize) -> Vec<Self::Item> {
32 let mut rng = rand::rng();
33 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
34 }
35}
36
37impl SampleRNG for Vec<isize> {
38 type Item = isize;
39 fn sample(&self, n: usize) -> Vec<Self::Item> {
40 let mut rng = rand::rng();
41 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
42 }
43}
44
45impl SampleRNG for Vec<i32> {
46 type Item = i32;
47 fn sample(&self, n: usize) -> Vec<Self::Item> {
48 let mut rng = rand::rng();
49 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
50 }
51}
52
53impl SampleRNG for Vec<i64> {
54 type Item = i64;
55 fn sample(&self, n: usize) -> Vec<Self::Item> {
56 let mut rng = rand::rng();
57 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
58 }
59}
60
61impl SampleRNG for Vec<f64> {
62 type Item = f64;
63 fn sample(&self, n: usize) -> Vec<Self::Item> {
64 let mut rng = rand::rng();
65 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
66 }
67}
68
69impl SampleRNG for Vec<f32> {
70 type Item = f32;
71 fn sample(&self, n: usize) -> Vec<Self::Item> {
72 let mut rng = rand::rng();
73 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
74 }
75}
76
77impl SampleRNG for Vec<char> {
78 type Item = char;
79 fn sample(&self, n: usize) -> Vec<Self::Item> {
80 let mut rng = rand::rng();
81 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
82 }
83}
84
85impl<'a> SampleRNG for Vec<&'a str> {
86 type Item = &'a str;
87 fn sample(&self, n: usize) -> Vec<Self::Item> {
88 let mut rng = rand::rng();
89 self.iter().map(|x| *x).choose_multiple(&mut rng, n)
90 }
91}
92
93impl SampleRNG for String {
94 type Item = char;
95 fn sample(&self, n: usize) -> Vec<Self::Item> {
96 let mut rng = rand::rng();
97 self.chars().choose_multiple(&mut rng, n)
98 }
99}