1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
use super::event::{occurrence::EventOccurrence, Event}; use chrono::{Date, Utc}; #[cfg(feature = "serde_support")] use serde::{Deserialize, Serialize}; #[derive(Debug, Default)] #[cfg_attr(feature = "serde_support", derive(Serialize, Deserialize))] pub struct Calendar { events: Vec<Event>, } impl Calendar { /** Creates new empty `Calendar` instance. It is equivalent to: ```rust # use dateless::Calendar; let instance: Calendar = Default::default(); ``` # Examples ```rust use dateless::Calendar; let calendar: Calendar = Default::default(); ``` */ pub fn new() -> Self { Default::default() } /** Adds passed event to the instance. # Examples ```rust use dateless::prelude::*; use chrono::Utc; let mut calendar = Calendar::new(); calendar.add_event( EventPartial::new(String::from("Anne's birthday")) .whole_day(Utc::today()) .complete() ); ``` */ pub fn add_event(&mut self, event: Event) { self.events.push(event); } /** Returns `Vec` of `EventOccurrence`s for the given day. # Examples ```rust use dateless::prelude::*; use chrono::Utc; let mut calendar = Calendar::new(); calendar.add_event( EventPartial::new(String::from("Anne's birthday")) .whole_day(Utc::today()) .complete() ); let events_today = calendar.day(Utc::today()); ``` */ pub fn day(&self, date: Date<Utc>) -> Vec<EventOccurrence> { self.events .iter() .filter_map(|event| event.get_occurrence_at(date)) .collect() } }