use std::fmt::{Debug, Display, Formatter};
#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
pub enum View {
#[default]
Covered,
Flag,
SteppedOnDud,
SteppedOnMine,
Clear {
adjacent_mines: u8,
},
Mine,
}
impl View {
#[allow(clippy::missing_panics_doc)]
#[must_use]
pub const fn as_char(self) -> char {
match self {
Self::Covered => '■',
Self::Flag => '⚐',
Self::SteppedOnDud => '~',
Self::SteppedOnMine => '☠',
Self::Clear { adjacent_mines } => match adjacent_mines {
0 => ' ',
mines => char::from_digit(mines as u32, 10)
.expect("Amount of adjacent mines should be a single decimal digit."),
},
Self::Mine => '*',
}
}
}
impl Display for View {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
Display::fmt(&self.as_char(), f)
}
}