1use rand::rngs::ThreadRng;
2use rand::{RngCore, SeedableRng as _};
3use rand_chacha::ChaCha20Rng;
4
5pub struct DataGenerator<Rng: RngCore>(Rng);
20
21impl<Rng: RngCore> DataGenerator<Rng> {
22 pub const fn rng(&mut self) -> &mut Rng {
24 &mut self.0
25 }
26}
27
28impl Default for DataGenerator<ThreadRng> {
29 fn default() -> Self {
30 Self(rand::rng())
31 }
32}
33
34impl DataGenerator<ChaCha20Rng> {
35 #[must_use]
37 pub fn new_with_seed(seed: u64) -> Self {
38 Self(ChaCha20Rng::seed_from_u64(seed))
39 }
40}
41
42impl<Rng: RngCore> From<Rng> for DataGenerator<Rng> {
43 fn from(value: Rng) -> Self {
44 Self(value)
45 }
46}