From 8034ec19cd8b8d30ee981aab6dd1932e1f254a42 Mon Sep 17 00:00:00 2001 From: Joscha Date: Wed, 24 Nov 2021 01:24:14 +0100 Subject: [PATCH] Support undated entries in EntryMap --- src/eval.rs | 7 ++++--- src/eval/entry.rs | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/eval.rs b/src/eval.rs index cb1cb8b..97c1e60 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -55,10 +55,11 @@ impl Eval { source: self.source, date: EntryDate::Date { root: date }, }; - self.map.insert(date, entry); + self.map.insert(entry); } else { assert_eq!(when.date.month(), 2); assert_eq!(when.date.day(), 29); + let date = NaiveDate::from_ymd(year, 2, 28); let entry = Entry { kind: EntryKind::Birthday, @@ -67,7 +68,7 @@ impl Eval { source: self.source, date: EntryDate::Date { root: date }, }; - self.map.insert(date, entry); + self.map.insert(entry); let date = NaiveDate::from_ymd(year, 3, 1); let entry = Entry { @@ -77,7 +78,7 @@ impl Eval { source: self.source, date: EntryDate::Date { root: date }, }; - self.map.insert(date, entry); + self.map.insert(entry); } } } diff --git a/src/eval/entry.rs b/src/eval/entry.rs index 7b3ac9f..8b15a1c 100644 --- a/src/eval/entry.rs +++ b/src/eval/entry.rs @@ -62,6 +62,7 @@ pub struct Entry { pub struct EntryMap { range: DateRange, map: HashMap>, + undated: Vec, } impl EntryMap { @@ -69,6 +70,7 @@ impl EntryMap { Self { range, map: HashMap::new(), + undated: vec![], } } @@ -82,13 +84,21 @@ impl EntryMap { } } - pub fn insert(&mut self, date: NaiveDate, entry: Entry) { - if self.range.contains(date) { - self.map.entry(date).or_insert(Some(entry)); + pub fn insert(&mut self, entry: Entry) { + if let Some(date) = entry.date.root() { + if self.range.contains(date) { + self.map.entry(date).or_insert(Some(entry)); + } + } else { + self.undated.push(entry); } } pub fn drain(&mut self) -> Vec { - self.map.drain().filter_map(|(_, entry)| entry).collect() + self.map + .drain() + .filter_map(|(_, entry)| entry) + .chain(self.undated.drain(..)) + .collect() } }