generator_combinator/
iter.rs1use crate::Generator;
2
3pub struct StringIter<'a> {
5 c: &'a Generator,
7
8 n: u128,
10
11 i: u128,
13}
14
15impl<'a> Iterator for StringIter<'a> {
16 type Item = String;
17
18 fn next(&mut self) -> Option<Self::Item> {
19 if self.i == self.n {
20 None
21 } else {
22 self.i += 1;
23 Some(self.c.generate_one(self.i - 1))
24 }
25 }
26}
27
28#[cfg(feature = "with_rand")]
29impl<'a> StringIter<'a> {
30 pub fn random(&self) -> String {
32 let num = rand::random::<u128>() % self.n;
33 self.c.generate_one(num)
34 }
35}
36
37impl<'a> From<&'a Generator> for StringIter<'a> {
38 fn from(c: &'a Generator) -> Self {
39 Self {
40 c,
41 n: c.len(),
42 i: 0,
43 }
44 }
45}