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
30
31
32
33
34
35
36
37
mod casual_date_time;
mod deadline;
mod exact_month_date;
mod past_time;
mod time;
mod weekdays;

use crate::rules::combinators;
use crate::rules::common;
use crate::rules::common_matchers;
use crate::rules::consts;
use crate::rules::errors;
use crate::rules::rules;
use crate::rules::tokens;
use chrono::{offset::TimeZone, DateTime};

pub fn parse<'a, Tz: TimeZone + 'a>(
    tz_aware: DateTime<Tz>,
    input: &'a str,
    exact_match: bool,
) -> Vec<Result<rules::MatchResult, errors::DateTimeError>> {
    let input_lowered = input.to_lowercase();
    combinators::apply_generic(
        tz_aware,
        &input_lowered,
        &[
            weekdays::interpret::<Tz>,
            time::interpret::<Tz>,
            past_time::interpret::<Tz>,
            exact_month_date::interpret::<Tz>,
            deadline::interpret::<Tz>,
            casual_date_time::interpret::<Tz>,
            common::slash_dmy::interpret::<Tz>,
        ],
        exact_match,
    )
}