aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs45
1 files changed, 26 insertions, 19 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 5dbf477..c912897 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -29,7 +29,7 @@ pub enum MapKind {
Command,
}
-#[derive(Debug)]
+#[derive(Debug, PartialEq)]
pub struct MapAction {
pub action: Action,
pub kind: MapKind,
@@ -129,26 +129,21 @@ where
I: Stream<Item = char>,
I::Error: ParseError<I::Item, I::Range, I::Position>,
{
- many::<Vec<_>, _>(
- (
- skip_many(newline()),
- whitespace_separator(),
- map_kind(),
- whitespace_separator(),
- trigger(),
- whitespace_separator(),
- action(),
- skip_many(newline()),
- )
- ).map(|collection| {
+ let comment = comment().map(|_| ());
+ let blank = skip_many(newline()).or(comment);
+
+ (
+ blank,
+ many::<Vec<Map>, _>(map()),
+ ).map(|(_, collection)| {
let mut maps = HashMap::new();
- for (_, _, kind, _, trigger, _, action, _) in collection {
+ for map in collection {
maps.insert(
- trigger,
+ map.trigger,
MapAction {
- action: action,
- kind: kind,
+ action: map.action,
+ kind: map.kind,
}
);
}
@@ -157,6 +152,19 @@ where
})
}
+fn comment<I>() -> impl Parser<Input = I>
+where
+ I: Stream<Item = char>,
+ I::Error: ParseError<I::Item, I::Range, I::Position>,
+{
+ skip_many(
+ (
+ token('#'),
+ skip_many(satisfy(|c| c != '\n')),
+ )// .map(|_| ())
+ )
+}
+
#[cfg(test)]
mod tests {
@@ -254,7 +262,6 @@ cmd <down> /usr/bin/say 'hello'
},
);
- // assert_eq!(result, Ok(expected));
- println!("{:?}", result);
+ assert_eq!(result, Ok(expected));
}
}