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)) } } }