aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorRuben Pollan2018-12-10 02:45:32 +0100
committerRuben Pollan2018-12-10 02:45:32 +0100
commit3097964b7bc8a96df8c619e3006a745db870175e (patch)
treebaa7409f79d075117c364722e34e6cc8799ec8f0 /src/main.rs
parent5f09796938cbdf11a99fa023aa8baeb76571b967 (diff)
Use iterators and itertools to produce events
Diffstat (limited to '')
-rw-r--r--src/main.rs22
1 files changed, 12 insertions, 10 deletions
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<Event> {
+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()
}