1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use crate::{Error, ParsePart};
use nom::bytes::complete::take_until;

#[cfg(feature = "chrono-timestamp")]
impl<'a> ParsePart<'a> for Option<crate::parser::DateTime> {
    fn parse(part: &'a str) -> Result<(&'a str, Self), Error> {
        let (rem, word) = take_until(" ")(part)?;

        match word {
            "-" => Ok((rem, None)),
            _ => {
                let dt = chrono::DateTime::parse_from_rfc3339(word)?;

                Ok((rem, Some(dt)))
            }
        }
    }
}

impl<'a> ParsePart<'a> for Option<&'a str> {
    fn parse(part: &'a str) -> Result<(&'a str, Self), Error> {
        let (rem, word) = take_until(" ")(part)?;

        match word {
            "-" => Ok((rem, None)),
            _ => Ok((rem, Some(word))),
        }
    }
}