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
use crate::prelude::RandomNumberGenerator; use core::iter::Iterator; use std::convert::TryInto; 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)) } } }