use yew::html::IntoPropValue; pub const MAX_ATTEMPTS: usize = 6; pub const WORD_LEN: usize = 5; #[derive(Clone, PartialEq)] pub enum KeyboardKeyType { Enter, Backspace, CharKey(char), } impl KeyboardKeyType { pub fn cmp_char(&self, char_to_compare: &char) -> bool { match self { KeyboardKeyType::CharKey(ch) => ch == char_to_compare, _ => false } } } #[derive(Clone, PartialEq)] pub enum Status { NotFound, Found, Almost, } #[derive(Clone, PartialEq)] pub struct AttemptField { pub char_field: char, pub status: Status, } #[derive(Clone, PartialEq)] pub struct Attempts { pub fields: Vec<Vec<AttemptField>>, } impl Attempts { pub fn new() -> Self { Attempts { fields: vec![] } } } #[derive(Clone, PartialEq)] pub struct VirtualKey { pub key: KeyboardKeyType, pub status: Option<Status>, } impl VirtualKey { pub fn from_charkey(charkey: char) -> Self { VirtualKey { key: KeyboardKeyType::CharKey(charkey), status: None, } } pub fn from_key(key: KeyboardKeyType) -> Self { VirtualKey { key, status: None } } } #[derive(Copy, Clone)] pub enum Key { // 13 Enter, // 8 Backspace, CharKey(char), Ignored, } impl From<u32> for Key { fn from(value: u32) -> Self { match value { 8 => Key::Backspace, 13 => Key::Enter, 65..=90 => Key::CharKey(value as u8 as char), 59 => Key::CharKey(209u8 as char), _ => Key::Ignored, } } } #[derive(PartialEq, Copy, Clone)] pub enum GameResult { Win, Fail, }