use device_query::Keycode;
use enigo::MouseButton;
use std::fmt;
#[derive(Debug)]
pub struct ParseError;
impl std::error::Error for ParseError {}
impl fmt::Display for ParseError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "ParseError: {}", self)
}
}
pub type Result<T> = std::result::Result<T, ParseError>;
pub fn parse_keycode(string: &str) -> Result<Keycode> {
match &*string.to_uppercase() {
"KEY0" => Ok(Keycode::Key0),
"KEY1" => Ok(Keycode::Key1),
"KEY2" => Ok(Keycode::Key2),
"KEY3" => Ok(Keycode::Key3),
"KEY4" => Ok(Keycode::Key4),
"KEY5" => Ok(Keycode::Key5),
"KEY6" => Ok(Keycode::Key6),
"KEY7" => Ok(Keycode::Key7),
"KEY8" => Ok(Keycode::Key8),
"KEY9" => Ok(Keycode::Key9),
"A" => Ok(Keycode::A),
"B" => Ok(Keycode::B),
"C" => Ok(Keycode::C),
"D" => Ok(Keycode::D),
"E" => Ok(Keycode::E),
"F" => Ok(Keycode::F),
"G" => Ok(Keycode::G),
"H" => Ok(Keycode::H),
"I" => Ok(Keycode::I),
"J" => Ok(Keycode::J),
"K" => Ok(Keycode::K),
"L" => Ok(Keycode::L),
"M" => Ok(Keycode::M),
"N" => Ok(Keycode::N),
"O" => Ok(Keycode::O),
"P" => Ok(Keycode::P),
"Q" => Ok(Keycode::Q),
"R" => Ok(Keycode::R),
"S" => Ok(Keycode::S),
"T" => Ok(Keycode::T),
"U" => Ok(Keycode::U),
"V" => Ok(Keycode::V),
"W" => Ok(Keycode::W),
"X" => Ok(Keycode::X),
"Y" => Ok(Keycode::Y),
"Z" => Ok(Keycode::Z),
"F1" => Ok(Keycode::F1),
"F2" => Ok(Keycode::F2),
"F3" => Ok(Keycode::F3),
"F4" => Ok(Keycode::F4),
"F5" => Ok(Keycode::F5),
"F6" => Ok(Keycode::F6),
"F7" => Ok(Keycode::F7),
"F8" => Ok(Keycode::F8),
"F9" => Ok(Keycode::F9),
"F10" => Ok(Keycode::F10),
"F11" => Ok(Keycode::F11),
"F12" => Ok(Keycode::F12),
"ESCAPE" => Ok(Keycode::Escape),
"SPACE" => Ok(Keycode::Space),
"LCONTROL" => Ok(Keycode::LControl),
"RCONTROL" => Ok(Keycode::RControl),
"LSHIFT" => Ok(Keycode::LShift),
"RSHIFT" => Ok(Keycode::RShift),
"LALT" => Ok(Keycode::LAlt),
"RALT" => Ok(Keycode::RAlt),
"ENTER" => Ok(Keycode::Enter),
_ => Err(ParseError),
}
}
pub fn parse_mousebutton(string: &str) -> Result<MouseButton> {
match &*string.to_uppercase() {
"LEFT" => Ok(MouseButton::Left),
"MIDDLE" => Ok(MouseButton::Middle),
"RIGHT" => Ok(MouseButton::Right),
"SCROLLUP" => Ok(MouseButton::ScrollUp),
"SCROLLDOWN" => Ok(MouseButton::ScrollDown),
"SCROLLLEFT" => Ok(MouseButton::ScrollLeft),
"SCROLLRIGHT" => Ok(MouseButton::ScrollRight),
_ => Err(ParseError),
}
}