clicker 0.4.1

a simple desktop automation tool
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),
    }
}