diff options
Diffstat (limited to 'src/parser/mod.rs')
-rw-r--r-- | src/parser/mod.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 884ba95..f67a3cb 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -52,6 +52,7 @@ mod iterator; use error::Result; use error::KairosErrorKind as KEK; use iter::Iter; +use timetype::IntoTimeType; use parser::timetype::timetype; use parser::iterator::iterator; @@ -60,15 +61,16 @@ pub enum Parsed { TimeType(::timetype::TimeType) } -named!(do_parse<Parsed>, alt_complete!( - do_parse!(it: iterator >> (Parsed::Iterator(it.into_user_iterator()))) | - do_parse!(tt: timetype >> (Parsed::TimeType(tt.into()))) +named!(do_parse<Result<Parsed>>, alt_complete!( + do_parse!(it: iterator >> (Ok(Parsed::Iterator(it.into_user_iterator())))) | + do_parse!(tt: timetype >> (tt.into_timetype().map(Parsed::TimeType))) )); pub fn parse(s: &str) -> Result<Parsed> { match do_parse(s.as_bytes()) { - IResult::Done(_, o) => Ok(o), - IResult::Error(e) => Err(e).map_err(From::from), + IResult::Done(_, Ok(o)) => Ok(o), + IResult::Done(_, Err(e)) => Err(e), + IResult::Error(e) => Err(e).map_err(From::from), IResult::Incomplete(Needed::Unknown) => Err(KEK::UnknownParserError.into()), IResult::Incomplete(Needed::Size(_)) => Err(KEK::UnknownParserError.into()), |