From 7b040a5f3c8f66a2fd95bc1baccfa4fa2885425d Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Wed, 3 Oct 2018 10:00:32 +0200 Subject: 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(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. --- src/parser.rs | 128 ++++++++++++++++++++++++++++------------------------------ 1 file 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>, + flags: Vec, } impl KeyboardKeyWithModifiers { - fn new(key: KeyboardKey, modifiers: Option>) -> Self { + fn new(key: KeyboardKey, modifiers: Vec) -> 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, 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); -- cgit v1.2.3