From d298ffabb262ab8fd06dbe55542579a839b74dff Mon Sep 17 00:00:00 2001 From: Joscha Date: Fri, 19 Nov 2021 12:25:51 +0000 Subject: [PATCH] Split up DATE parsing --- src/parse.rs | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/parse.rs b/src/parse.rs index c168188..8233f56 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -6,7 +6,9 @@ use pest::error::{Error, ErrorVariant}; use pest::iterators::Pair; use pest::{Parser, Span}; -use crate::commands::{Birthday, BirthdaySpec, Command, Done, Note, Spec, Task}; +use crate::commands::{ + Birthday, BirthdaySpec, Command, DateSpec, Done, FormulaSpec, Note, Spec, Task, WeekdaySpec, +}; #[derive(pest_derive::Parser)] #[grammar = "parse/todayfile.pest"] @@ -63,11 +65,35 @@ fn parse_time(p: Pair) -> Result { } } -fn parse_date(p: Pair) -> Result { +fn parse_date_fixed(p: Pair) -> Result { + assert_eq!(p.as_rule(), Rule::date_fixed); dbg!(p); todo!() } +fn parse_date_expr(p: Pair) -> Result { + assert_eq!(p.as_rule(), Rule::date_expr); + dbg!(p); + todo!() +} + +fn parse_date_weekday(p: Pair) -> Result { + assert_eq!(p.as_rule(), Rule::date_weekday); + dbg!(p); + todo!() +} + +fn parse_date(p: Pair) -> Result { + assert_eq!(p.as_rule(), Rule::date); + let p = p.into_inner().next().unwrap(); + match p.as_rule() { + Rule::date_fixed => parse_date_fixed(p).map(Spec::Date), + Rule::date_expr => parse_date_expr(p).map(Spec::Formula), + Rule::date_weekday => parse_date_weekday(p).map(Spec::Weekday), + _ => unreachable!(), + } +} + fn parse_from(p: Pair) -> Result { assert_eq!(p.as_rule(), Rule::from); parse_datum(p.into_inner().next().unwrap())