aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.rs
diff options
context:
space:
mode:
authorTeddy Wing2018-10-03 10:00:32 +0200
committerTeddy Wing2018-10-03 10:00:32 +0200
commit7b040a5f3c8f66a2fd95bc1baccfa4fa2885425d (patch)
treec8d6e5498ed03989b7f7b7c454d1504f06876f74 /src/parser.rs
parent54cc9a4b02acf1339c63dabece9eaf07f28fb152 (diff)
downloaddome-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.
Diffstat (limited to 'src/parser.rs')
-rw-r--r--src/parser.rs128
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);