Unify Dates logic and expand DoneDate format

This commit is contained in:
Joscha 2021-12-14 23:32:04 +01:00
parent 2e7ab3c4a1
commit c69af9bcde
8 changed files with 119 additions and 133 deletions

View file

@ -268,7 +268,7 @@ pub enum DoneDate {
Date {
root: NaiveDate,
},
DateWithTime {
DateTime {
root: NaiveDate,
root_time: Time,
},
@ -276,7 +276,12 @@ pub enum DoneDate {
root: NaiveDate,
other: NaiveDate,
},
DateToDateWithTime {
DateTimeToTime {
root: NaiveDate,
root_time: Time,
other_time: Time,
},
DateTimeToDateTime {
root: NaiveDate,
root_time: Time,
other: NaiveDate,

View file

@ -229,9 +229,14 @@ impl fmt::Display for DoneDate {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
DoneDate::Date { root } => write!(f, "{}", root),
DoneDate::DateWithTime { root, root_time } => write!(f, "{} {}", root, root_time),
DoneDate::DateTime { root, root_time } => write!(f, "{} {}", root, root_time),
DoneDate::DateToDate { root, other } => write!(f, "{} -- {}", root, other),
DoneDate::DateToDateWithTime {
DoneDate::DateTimeToTime {
root,
root_time,
other_time,
} => write!(f, "{} {} -- {}", root, root_time, other_time),
DoneDate::DateTimeToDateTime {
root,
root_time,
other,

View file

@ -112,6 +112,7 @@ statements = { (stmt_date | stmt_bdate | stmt_from | stmt_until | stmt_except |
donedate = {
datum ~ time ~ "--" ~ datum ~ time
| datum ~ time ~ "--" ~ time
| datum ~ time
| datum ~ "--" ~ datum
| datum

View file

@ -652,7 +652,7 @@ fn parse_donedate(p: Pair<'_, Rule>) -> Result<DoneDate> {
root: parse_datum(ps.pop().unwrap())?.value,
},
2 => match ps[1].as_rule() {
Rule::time => DoneDate::DateWithTime {
Rule::time => DoneDate::DateTime {
root_time: parse_time(ps.pop().unwrap())?.value,
root: parse_datum(ps.pop().unwrap())?.value,
},
@ -662,7 +662,12 @@ fn parse_donedate(p: Pair<'_, Rule>) -> Result<DoneDate> {
},
_ => unreachable!(),
},
4 => DoneDate::DateToDateWithTime {
3 => DoneDate::DateTimeToTime {
other_time: parse_time(ps.pop().unwrap())?.value,
root_time: parse_time(ps.pop().unwrap())?.value,
root: parse_datum(ps.pop().unwrap())?.value,
},
4 => DoneDate::DateTimeToDateTime {
other_time: parse_time(ps.pop().unwrap())?.value,
other: parse_datum(ps.pop().unwrap())?.value,
root_time: parse_time(ps.pop().unwrap())?.value,