bracket_random/
iterators.rs

1use crate::prelude::RandomNumberGenerator;
2use core::iter::Iterator;
3use std::convert::TryInto;
4
5pub struct DiceIterator<'a> {
6    die_type: i32,
7    rng: &'a mut RandomNumberGenerator,
8}
9
10impl<'a> DiceIterator<'a> {
11    pub fn new<T>(die_type: T, rng: &'a mut RandomNumberGenerator) -> Self
12    where
13        T: TryInto<i32>,
14    {
15        let dt = die_type.try_into().ok().unwrap();
16        Self { die_type: dt, rng }
17    }
18}
19
20impl<'a> Iterator for DiceIterator<'a> {
21    type Item = i32;
22
23    fn next(&mut self) -> Option<i32> {
24        Some(self.rng.roll_dice(1, self.die_type))
25    }
26}