use crate::RollExpression;
use crate::{Attack, Check, Damage};
pub use rolloutcome::RollOutcome;
mod rolloutcome;
mod rollparse;
#[derive(PartialEq, Debug, Clone)]
pub enum Roll {
Check(Check),
Damage(Damage),
Attack(Attack),
}
impl RollExpression for Roll {
type Outcome = RollOutcome;
fn roll(&self) -> Self::Outcome {
match self {
Roll::Check(c) => c.roll().into(),
Roll::Damage(d) => d.roll().into(),
Roll::Attack(a) => a.roll().into(),
}
}
}
impl Roll {
pub fn is_check(&self) -> bool {
match self {
Self::Check(_) => true,
_ => false,
}
}
pub fn is_damage(&self) -> bool {
match self {
Self::Damage(_) => true,
_ => false,
}
}
pub fn is_attack(&self) -> bool {
match self {
Self::Attack(_) => true,
_ => false,
}
}
}
impl From<Check> for Roll {
fn from(check: Check) -> Self {
Self::Check(check)
}
}
impl From<Damage> for Roll {
fn from(damage: Damage) -> Self {
Self::Damage(damage)
}
}
impl From<Attack> for Roll {
fn from(attack: Attack) -> Self {
Self::Attack(attack)
}
}