From 3097964b7bc8a96df8c619e3006a745db870175e Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Mon, 10 Dec 2018 02:45:32 +0100 Subject: Use iterators and itertools to produce events --- src/calendar.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'src/calendar.rs') diff --git a/src/calendar.rs b/src/calendar.rs index 6df2f74..fcec54e 100644 --- a/src/calendar.rs +++ b/src/calendar.rs @@ -2,9 +2,9 @@ use std::io::BufRead; use std::fmt; use ical::IcalParser; use chrono::Duration; +use itertools::Itertools; use date::Date; -use event; use event::{Event, End}; use periodic::Periodic; use errors::EventError; @@ -62,17 +62,13 @@ impl Calendar { Ok(Calendar { single, periodic }) } - pub fn get(&self, first: &Date, last: &Date) -> Vec { - let mut events = event::get(&self.single, first, last).to_vec(); - for p in &self.periodic { - let mut p_events = p.iter() - .skip_while(|e| e.end_date() < *first) - .take_while(|e| e.start <= *last) - .collect(); - events.append(&mut p_events); - } - events.sort(); - events + pub fn iter<'a>(&'a self) -> impl Iterator + 'a { + self.single.iter().map(Event::clone).merge( + self.periodic + .iter() + .map(|p| p.iter()) + .kmerge(), + ) } } -- cgit v1.2.3