diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2019-10-03 14:53:00 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2019-10-03 16:36:04 +0200 |
commit | f5a4331d0adf7b5df221ae3f27fa7be84cf2938a (patch) | |
tree | 0088cfb002b40ec1e5348e4a48b3c583573fe310 | |
parent | af6d67416b35d533241c50bbb587bc5a658ab886 (diff) |
Add helper function to parse string by several datetime formats
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | lib/etc/libimagutil/src/date.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/etc/libimagutil/src/date.rs b/lib/etc/libimagutil/src/date.rs index dc9b7745..9ea5a4de 100644 --- a/lib/etc/libimagutil/src/date.rs +++ b/lib/etc/libimagutil/src/date.rs @@ -45,3 +45,28 @@ pub fn datetime_from_string<S>(s: S) -> Result<NaiveDateTime, ParseError> NaiveDateTime::parse_from_str(s.as_ref(), NAIVE_DATETIME_STRING_FORMAT) } +/// Try to parse `s` with all formats from `fmts` +/// +/// The function returns an `Option<NaiveDateTime>`, so that the user of the function can generate +/// the appropriate error message themselves. +/// +pub fn try_to_parse_datetime_from_string<'a, S, Formats, Format>(s: S, fmts: Formats) -> Option<NaiveDateTime> + where S: AsRef<str>, + Formats: Iterator<Item = Format>, + Format: AsRef<str> +{ + fmts.fold(None, |a, f| a.or_else(|| NaiveDateTime::parse_from_str(s.as_ref(), f.as_ref()).ok())) +} + +#[test] +fn test_try_to_parse_datetime_from_string() { + let formats = vec![ + "%Y%m%dT%H%M%S", + "%Y%m%dT%H%M%SZ" + ]; + + let text = "20190730T160527Z"; + + assert!(try_to_parse_datetime_from_string(text, formats.iter()).is_some()) +} + |