random_data/
generator.rs

1use rand::rngs::ThreadRng;
2use rand::{RngCore, SeedableRng as _};
3use rand_chacha::ChaCha20Rng;
4
5/// Generator provded to the data types. Refer to [`DataType`](crate::DataType) for usage information.
6///
7/// # Examples
8///
9/// ```
10/// use random_data::DataGenerator;
11/// use random_data::rand;
12///
13/// // Create a default generator
14/// let _ = DataGenerator::default();
15///
16/// // Create a generator with a custom random
17/// let _ = DataGenerator::from(rand::rng());
18/// ```
19pub struct DataGenerator<Rng: RngCore>(Rng);
20
21impl<Rng: RngCore> DataGenerator<Rng> {
22    /// Returns the inner random generator
23    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    /// Returns a [`DataGenerator`] with a given seed
36    #[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}