diff options
| author | Teddy Wing | 2018-08-09 02:53:50 +0200 |
|---|---|---|
| committer | Teddy Wing | 2018-08-09 02:53:50 +0200 |
| commit | d05b00eb8fa01a947fb1217b771444f43852499a (patch) | |
| tree | 322838bc9264f2964ab901e84f904e2aad59235d /src | |
| parent | 4d651343069d344b0af668f898db63de475463a1 (diff) | |
| download | dome-key-map-d05b00eb8fa01a947fb1217b771444f43852499a.tar.bz2 | |
Ignore case when parsing `HeadphoneButton`
Should work with `<play>`, `<Play>`, `<PLAY>`, `<PlAy>`.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib.rs | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -5,7 +5,7 @@ use std::collections::HashMap; use combine::*; use combine::parser::choice::or; -use combine::parser::char::string; +use combine::parser::char::{string, string_cmp}; #[derive(Debug, PartialEq)] pub enum HeadphoneButton { @@ -54,9 +54,12 @@ where token('<'), token('>'), choice!( - string("play").map(|_| HeadphoneButton::Play), - string("up").map(|_| HeadphoneButton::Up), - string("down").map(|_| HeadphoneButton::Down) + string_cmp("play", |l, r| l.eq_ignore_ascii_case(&r)) + .map(|_| HeadphoneButton::Play), + string_cmp("up", |l, r| l.eq_ignore_ascii_case(&r)) + .map(|_| HeadphoneButton::Up), + string_cmp("down", |l, r| l.eq_ignore_ascii_case(&r)) + .map(|_| HeadphoneButton::Down) ), ) } @@ -99,6 +102,14 @@ mod tests { } #[test] + fn headphone_button_ignores_case() { + let text = "<Play>"; + let result = headphone_button().parse(text).map(|t| t.0); + + assert_eq!(result, Ok(HeadphoneButton::Play)); + } + + #[test] fn trigger_parses_headphone_button_sequence() { let text = "<up><down><play>"; let result = trigger().parse(text).map(|t| t.0); |
