use std::fmt;
use crate::{AttackOutcome, CheckOutcome, DamageOutcome};
#[derive(Clone)]
pub enum RollOutcome {
Check(CheckOutcome),
Damage(DamageOutcome),
Attack(AttackOutcome),
}
impl RollOutcome {
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 fmt::Display for RollOutcome {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
RollOutcome::Check(c) => write!(f, "{}", c),
RollOutcome::Damage(d) => write!(f, "{}", d),
RollOutcome::Attack(a) => write!(f, "{}", a),
}
}
}
impl fmt::Debug for RollOutcome {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
RollOutcome::Check(c) => write!(f, "{:?}", c),
RollOutcome::Damage(d) => write!(f, "{:?}", d),
RollOutcome::Attack(a) => write!(f, "{:?}", a),
}
}
}
impl From<CheckOutcome> for RollOutcome {
fn from(o: CheckOutcome) -> Self {
Self::Check(o)
}
}
impl From<DamageOutcome> for RollOutcome {
fn from(o: DamageOutcome) -> Self {
Self::Damage(o)
}
}
impl From<AttackOutcome> for RollOutcome {
fn from(o: AttackOutcome) -> Self {
Self::Attack(o)
}
}