diff options
| author | Teddy Wing | 2018-10-03 10:00:32 +0200 | 
|---|---|---|
| committer | Teddy Wing | 2018-10-03 10:00:32 +0200 | 
| commit | 7b040a5f3c8f66a2fd95bc1baccfa4fa2885425d (patch) | |
| tree | c8d6e5498ed03989b7f7b7c454d1504f06876f74 | |
| parent | 54cc9a4b02acf1339c63dabece9eaf07f28fb152 (diff) | |
| download | dome-key-map-7b040a5f3c8f66a2fd95bc1baccfa4fa2885425d.tar.bz2 | |
KeyboardKeyWithModifiers: Remove `Option` from `flags` field
I originally wrapped the contained `Vec` in an `Option` to that we
wouldn't have to initialise whole new empty `Vec` for every key in an
`Action` list.
However, this made less sense once I wrote the parser and ended up with
an empty `Vec` by default that I then had to convert into an `Option`.
Now I've started the code to type keys including modifiers, and the
`Option` no longer makes any sense at all. In order to type keys
(including modifiers), I'll be using Autopilot's `tap()` function:
    pub fn tap<T: KeyCodeConvertible + Copy>(key: T, flags: &[Flag], delay_ms: u64) {
This function requires a slice, so I ended up getting a `Vec` from my
parser, converting it to an Option to satisfy my original interface, and
now would have to convert it back into a `Vec` or slice in order to be
able to pass it into `tap()`. Talk about unnecessary.
Get rid of the `Option` because it's more work for absolutely no reason.
| -rw-r--r-- | src/parser.rs | 128 | 
1 files changed, 61 insertions, 67 deletions
| diff --git a/src/parser.rs b/src/parser.rs index 5d79cc9..9e11175 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -73,11 +73,11 @@ enum KeyboardKey {  #[derive(Debug, PartialEq)]  struct KeyboardKeyWithModifiers {      key: KeyboardKey, -    flags: Option<Vec<Flag>>, +    flags: Vec<Flag>,  }  impl KeyboardKeyWithModifiers { -    fn new(key: KeyboardKey, modifiers: Option<Vec<Flag>>) -> Self { +    fn new(key: KeyboardKey, modifiers: Vec<Flag>) -> Self {          KeyboardKeyWithModifiers {              key: key,              flags: modifiers, @@ -253,7 +253,7 @@ where                      .map(|c|                          KeyboardKeyWithModifiers::new(                              KeyboardKey::Character(Character::new(c)), -                            None, +                            vec![],                          )                      ),                  special_key() @@ -305,12 +305,6 @@ where              ))          )      ).map(|(modifiers, key): (Vec<Flag>, KeyboardKey)| { -        let modifiers = if modifiers.is_empty() { -            None -        } else { -            Some(modifiers) -        }; -          KeyboardKeyWithModifiers::new(              key,              modifiers, @@ -627,47 +621,47 @@ mod tests {          let expected = Action::Map(vec![              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('t')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('y')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('p')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('e')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new(' ')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('h')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('e')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('l')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('l')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('o')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('!')), -                None, +                vec![],              ),          ]);          let result = action_map().easy_parse(text).map(|t| t.0); @@ -682,39 +676,39 @@ mod tests {          let expected = Action::Map(vec![              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('o')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('n')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('e')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('l')), -                Some(vec![Flag::Control]), +                vec![Flag::Control],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('t')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('w')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('o')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('s')), -                Some(vec![Flag::Meta]), +                vec![Flag::Meta],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::KeyCode(KeyCode::new(autopilot::key::KeyCode::LeftArrow)), -                Some(vec![Flag::Alt]), +                vec![Flag::Alt],              ),          ]);          let result = action_map().easy_parse(text).map(|t| t.0); @@ -728,26 +722,26 @@ mod tests {          let expected = Action::Map(vec![              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('g')), -                Some(vec![ +                vec![                      Flag::Control,                      Flag::Alt, -                ]), +                ],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('s')), -                Some(vec![ +                vec![                      Flag::Meta,                      Flag::Shift, -                ]), +                ],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::KeyCode(KeyCode::new(autopilot::key::KeyCode::Home)), -                Some(vec![ +                vec![                      Flag::Meta,                      Flag::Alt,                      Flag::Control,                      Flag::Shift, -                ]), +                ],              ),          ]);          let result = action_map().easy_parse(text).map(|t| t.0); @@ -762,43 +756,43 @@ mod tests {          let expected = Action::Map(vec![              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('r')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('e')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('a')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('d')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('y')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::KeyCode(KeyCode::new(autopilot::key::KeyCode::F2)), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::KeyCode(KeyCode::new(autopilot::key::KeyCode::Space)), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('g')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('o')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::KeyCode(KeyCode::new(autopilot::key::KeyCode::Escape)), -                None, +                vec![],              ),          ]);          let result = action_map().easy_parse(text).map(|t| t.0); @@ -813,59 +807,59 @@ mod tests {          let expected = Action::Map(vec![              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('t')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('y')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('p')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('e')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('\\')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('o')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('n')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('e')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('b')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('s')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('l')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('a')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('s')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('h')), -                None, +                vec![],              ),          ]);          let result = action_map().easy_parse(text).map(|t| t.0); @@ -880,35 +874,35 @@ mod tests {          let expected = Action::Map(vec![              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('t')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('y')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('p')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('e')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('<')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('l')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('t')), -                None, +                vec![],              ),              KeyboardKeyWithModifiers::new(                  KeyboardKey::Character(Character::new('>')), -                None, +                vec![],              ),          ]);          let result = action_map().easy_parse(text).map(|t| t.0); | 
