diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2017-11-20 18:36:04 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2017-11-24 15:29:38 +0100 |
commit | 02939068e351ce5e37f5258c3ecb45480f3d3656 (patch) | |
tree | 00e1e91bf1d911719f0c9eccfd6589eba8b2fa16 /src/parser/mod.rs | |
parent | e8afcf56c124b228e4328760af6a7741b1bdd658 (diff) |
Add out of bounds check and error propagation for NaiveDate::from_ymd() calls
* Added recursion limit for error_chain
* Added new error for out-of-bounds error
* Added IntoTimeType helper trait
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()), |