use super::*;
#[derive(Copy, Clone, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Dice(UniformInt<u8>);
impl Dice {
#[track_caller]
#[inline]
pub fn new(n: u8) -> Dice {
Dice(UniformInt::try_new_inclusive(1, n).unwrap())
}
}
impl Dice {
pub const D4: Dice = Dice(UniformInt::constant(1, 4));
pub const D6: Dice = Dice(UniformInt::constant(1, 6));
pub const D8: Dice = Dice(UniformInt::constant(1, 8));
pub const D10: Dice = Dice(UniformInt::constant(1, 10));
pub const D20: Dice = Dice(UniformInt::constant(1, 20));
}
impl Distribution<i32> for Dice {
#[inline]
fn sample<R: Rng + ?Sized>(&self, rand: &mut Random<R>) -> i32 {
self.0.sample(rand) as i32
}
}