Support undated entries in EntryMap
This commit is contained in:
parent
35184e21e9
commit
8034ec19cd
2 changed files with 18 additions and 7 deletions
|
|
@ -55,10 +55,11 @@ impl Eval {
|
||||||
source: self.source,
|
source: self.source,
|
||||||
date: EntryDate::Date { root: date },
|
date: EntryDate::Date { root: date },
|
||||||
};
|
};
|
||||||
self.map.insert(date, entry);
|
self.map.insert(entry);
|
||||||
} else {
|
} else {
|
||||||
assert_eq!(when.date.month(), 2);
|
assert_eq!(when.date.month(), 2);
|
||||||
assert_eq!(when.date.day(), 29);
|
assert_eq!(when.date.day(), 29);
|
||||||
|
|
||||||
let date = NaiveDate::from_ymd(year, 2, 28);
|
let date = NaiveDate::from_ymd(year, 2, 28);
|
||||||
let entry = Entry {
|
let entry = Entry {
|
||||||
kind: EntryKind::Birthday,
|
kind: EntryKind::Birthday,
|
||||||
|
|
@ -67,7 +68,7 @@ impl Eval {
|
||||||
source: self.source,
|
source: self.source,
|
||||||
date: EntryDate::Date { root: date },
|
date: EntryDate::Date { root: date },
|
||||||
};
|
};
|
||||||
self.map.insert(date, entry);
|
self.map.insert(entry);
|
||||||
|
|
||||||
let date = NaiveDate::from_ymd(year, 3, 1);
|
let date = NaiveDate::from_ymd(year, 3, 1);
|
||||||
let entry = Entry {
|
let entry = Entry {
|
||||||
|
|
@ -77,7 +78,7 @@ impl Eval {
|
||||||
source: self.source,
|
source: self.source,
|
||||||
date: EntryDate::Date { root: date },
|
date: EntryDate::Date { root: date },
|
||||||
};
|
};
|
||||||
self.map.insert(date, entry);
|
self.map.insert(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ pub struct Entry {
|
||||||
pub struct EntryMap {
|
pub struct EntryMap {
|
||||||
range: DateRange,
|
range: DateRange,
|
||||||
map: HashMap<NaiveDate, Option<Entry>>,
|
map: HashMap<NaiveDate, Option<Entry>>,
|
||||||
|
undated: Vec<Entry>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EntryMap {
|
impl EntryMap {
|
||||||
|
|
@ -69,6 +70,7 @@ impl EntryMap {
|
||||||
Self {
|
Self {
|
||||||
range,
|
range,
|
||||||
map: HashMap::new(),
|
map: HashMap::new(),
|
||||||
|
undated: vec![],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -82,13 +84,21 @@ impl EntryMap {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn insert(&mut self, date: NaiveDate, entry: Entry) {
|
pub fn insert(&mut self, entry: Entry) {
|
||||||
if self.range.contains(date) {
|
if let Some(date) = entry.date.root() {
|
||||||
self.map.entry(date).or_insert(Some(entry));
|
if self.range.contains(date) {
|
||||||
|
self.map.entry(date).or_insert(Some(entry));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.undated.push(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn drain(&mut self) -> Vec<Entry> {
|
pub fn drain(&mut self) -> Vec<Entry> {
|
||||||
self.map.drain().filter_map(|(_, entry)| entry).collect()
|
self.map
|
||||||
|
.drain()
|
||||||
|
.filter_map(|(_, entry)| entry)
|
||||||
|
.chain(self.undated.drain(..))
|
||||||
|
.collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue