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
extern crate pest;
#[macro_use]
extern crate pest_derive;
use chrono::DateTime;
use thiserror::Error;
pub mod interpreter;
pub mod parser;
#[derive(Error, Debug)]
pub enum HTPError {
#[error(transparent)]
ParseError(#[from] parser::ParseError),
#[error(transparent)]
EvaluationError(#[from] interpreter::EvaluationError),
}
pub fn parse<Tz: chrono::TimeZone>(s: &str, now: DateTime<Tz>) -> Result<DateTime<Tz>, HTPError> {
let time_clue = parser::parse_time_clue_from_str(s)?;
let datetime = interpreter::evaluate(time_clue, now)?;
Ok(datetime)
}