use chrono::{Duration, NaiveDate}; use icalendar::{Alarm, Calendar, Component, Event, EventLike, Property}; use crate::trash::TrashType; pub(crate) fn calendar_from_pickup_dates(dates: Vec<(TrashType, NaiveDate)>) -> Calendar { let mut ical = Calendar::new(); ical.name("Twente Milieu Afvalkalender"); let events = dates.iter().map(|date| { let description = match date.0 { TrashType::Grey => "Restafval wordt opgehaald", TrashType::Green => "GFT wordt opgehaald", TrashType::Paper => "Papier wordt opgehaald", TrashType::Packages => "Verpakkingen worden opgehaald", }; let color = Property::new( "COLOR", match date.0 { TrashType::Grey => "darkgray", TrashType::Green => "darkgreen", TrashType::Paper => "royalblue", TrashType::Packages => "darkorange", }, ); let reminder = Alarm::display(description, -Duration::hours(5)); Event::new() .all_day(date.1) .summary(description) .append_property(color) .alarm(reminder) .done() }); for event in events { ical.push(event); } ical.done() }