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/main.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index ce2284d..d531687 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,32 +1,34 @@ extern crate almanac; +extern crate itertools; use std::env; use std::io::BufReader; use std::fs::File; +use itertools::Itertools; use almanac::Calendar; use almanac::Date; use almanac::Duration; -use almanac::Event; fn main() { let first = Date::now(); let last = first + Duration::days(7); - let mut events: Vec<_> = env::args() - .skip(1) - .map(|arg| ics_calendar(&arg, &first, &last)) - .flatten() - .collect(); - events.sort(); + let calendars: Vec<_> = env::args().skip(1).map(|arg| ics_calendar(&arg)).collect(); + let events = calendars + .iter() + .map(|c| c.iter()) + .kmerge() + .skip_while(|e| e.end_date() < first) + .take_while(|e| e.start <= last); + for event in events { println!("{}", event); } } -fn ics_calendar(file_path: &str, first: &Date, last: &Date) -> Vec { +fn ics_calendar(file_path: &str) -> Calendar { let file = File::open(file_path).unwrap(); let buf = BufReader::new(file); - let calendar = Calendar::parse(buf).unwrap(); - calendar.get(first, last) + Calendar::parse(buf).unwrap() } -- cgit v1.2.3