1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use crate::prelude::RandomNumberGenerator;
use std::convert::TryInto;
use core::iter::Iterator;

pub struct DiceIterator {
    die_type : i32,
    rng : *mut RandomNumberGenerator
}

impl DiceIterator {
    pub fn new<T>(die_type : T, rng : &mut RandomNumberGenerator) -> Self
    where T: TryInto<i32>
    {
        let dt = die_type.try_into().ok().unwrap();
        Self {
            die_type : dt,
            rng
        }
    }
}

impl Iterator for DiceIterator {
    type Item = i32;

    fn next(&mut self) -> Option<i32> {
        unsafe {
            Some(self.rng.as_mut().unwrap().roll_dice(1, self.die_type))
        }
    }
}