@@ -4,9 +4,7 @@ use core::hash::{Hash, Hasher};
44use core:: mem:: discriminant;
55use std:: collections:: { HashMap , HashSet } ;
66
7- use rand:: rngs:: ThreadRng ;
8- use rand:: seq:: IndexedRandom as _;
9- use rand:: { Rng as _, rng} ;
7+ use rand:: distr:: uniform:: { SampleRange , SampleUniform } ;
108use random_data:: DataType ;
119use serde_json:: { Number , Value } ;
1210
@@ -30,15 +28,13 @@ pub trait NullableGenerator<T>: Sized {
3028/// Contains the list of data types and the random generator to apply
3129/// generators.
3230pub struct Data {
33- /// Radnom data generator
34- random_data_generator : RandomDataGenerator ,
3531 /// Pseudo-random refs
3632 ///
3733 /// This represents data that is randomly generated once, then used in
3834 /// multiple place.
3935 refs : HashMap < String , OutputData > ,
40- /// Random generator
41- rng : ThreadRng ,
36+ /// Radnom data generator
37+ rng : RandomDataGenerator ,
4238 /// Data types that were required to be unique.
4339 uniq_types : HashMap < String , HashSet < OutputData > > ,
4440 /// User-defined data types
@@ -65,20 +61,20 @@ impl Data {
6561
6662 let value = if let Some ( values) = self . user_defined . get ( data_type) {
6763 OutputData :: String (
68- values
69- . choose ( & mut self . rng )
64+ self . rng
65+ . choose ( values )
7066 . ok_or ( Error :: FakerDefEmpty ) ?
7167 . to_owned ( ) ,
7268 )
7369 } else if data_type == "Bool" {
7470 OutputData :: Bool ( self . rng . random_bool ( 0.5 ) )
7571 } else if data_type == "Int" {
76- OutputData :: Int ( self . rng . random_range ( 0 ..=u64:: MAX ) )
72+ OutputData :: Int ( self . random_range ( 0 ..=u64:: MAX ) )
7773 } else if data_type == "Float" {
78- OutputData :: Float ( self . rng . random_range ( 0.0f64 ..=f64:: MAX ) )
74+ OutputData :: Float ( self . random_range ( 0.0f64 ..=f64:: MAX ) )
7975 } else {
8076 OutputData :: String (
81- self . random_data_generator . random_value (
77+ self . rng . random_value (
8278 DataType :: try_from ( data_type)
8379 . map_err ( |( ) | Error :: InvalidDataType ( data_type. to_owned ( ) ) ) ?,
8480 ) ,
@@ -94,8 +90,8 @@ impl Data {
9490 . split ( '|' )
9591 . filter ( |x| !x. is_empty ( ) )
9692 . collect :: < Vec < _ > > ( ) ;
97- values
98- . choose ( self . rng ( ) )
93+ self . rng
94+ . choose ( & values )
9995 . ok_or ( Error :: MissingValueBeforePipe )
10096 . map ( |data| OutputData :: String ( ( * data) . to_owned ( ) ) )
10197 }
@@ -128,7 +124,7 @@ impl Data {
128124 u64:: MAX
129125 } ;
130126
131- return Ok ( OutputData :: Int ( self . rng ( ) . random_range ( min..max) ) ) ;
127+ return Ok ( OutputData :: Int ( self . random_range ( min..max) ) ) ;
132128 }
133129 match min_str. parse ( ) {
134130 Ok ( min) => {
@@ -139,7 +135,7 @@ impl Data {
139135 } else {
140136 f64:: MAX
141137 } ;
142- Ok ( OutputData :: Float ( self . rng ( ) . random_range ( min..max) ) )
138+ Ok ( OutputData :: Float ( self . random_range ( min..max) ) )
143139 }
144140 Err ( error) => Err ( Error :: invalid_bounds ( || min_str. to_owned ( ) ) ( error) ) ,
145141 }
@@ -214,9 +210,8 @@ impl Data {
214210 }
215211
216212 Ok ( Self {
217- random_data_generator : RandomDataGenerator :: new ( seed) ,
213+ rng : RandomDataGenerator :: new ( seed) ,
218214 user_defined,
219- rng : rng ( ) ,
220215 refs : HashMap :: new ( ) ,
221216 uniq_types : HashMap :: new ( ) ,
222217 } )
@@ -246,9 +241,13 @@ impl Data {
246241 self . rng . random_bool ( 0.3 )
247242 }
248243
249- /// Borrows the random generator as mutable.
250- pub const fn rng ( & mut self ) -> & mut ThreadRng {
251- & mut self . rng
244+ /// Chooses an element from a range with the random generator
245+ pub fn random_range < T , R > ( & mut self , range : R ) -> T
246+ where
247+ T : SampleUniform ,
248+ R : SampleRange < T > ,
249+ {
250+ self . rng . random_range ( range)
252251 }
253252
254253 /// List the possible values of a data-type
0 commit comments