use {
keyboard_types::NamedKey,
windows_sys::Win32::UI::Input::KeyboardAndMouse::VIRTUAL_KEY,
};
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum Key {
Named(NamedKey),
Character(String),
Unidentified(VIRTUAL_KEY),
Dead(Option<char>),
}
impl From<NamedKey> for Key {
#[inline]
fn from(action: NamedKey) -> Self {
Key::Named(action)
}
}
impl From<VIRTUAL_KEY> for Key {
#[inline]
fn from(code: VIRTUAL_KEY) -> Self {
Key::Unidentified(code)
}
}
impl PartialEq<NamedKey> for Key {
#[inline]
fn eq(&self, rhs: &NamedKey) -> bool {
match self {
Key::Named(a) => a == rhs,
_ => false,
}
}
}
impl PartialEq<str> for Key {
#[inline]
fn eq(&self, rhs: &str) -> bool {
match self {
Key::Character(s) => s == rhs,
_ => false,
}
}
}
impl PartialEq<&str> for Key {
#[inline]
fn eq(&self, rhs: &&str) -> bool {
self == *rhs
}
}
impl PartialEq<VIRTUAL_KEY> for Key {
#[inline]
fn eq(&self, rhs: &VIRTUAL_KEY) -> bool {
match self {
Key::Unidentified(code) => code == rhs,
_ => false,
}
}
}
impl PartialEq<Key> for VIRTUAL_KEY {
#[inline]
fn eq(&self, rhs: &Key) -> bool {
rhs == self
}
}