From 0c0be859f95cff3e6b5dbaa335f14b04da93bf26 Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Sun, 2 Nov 2025 15:00:13 +0100 Subject: [PATCH] calendar object: Move occurence methods to CalendarObjectComponent and add get_property method --- crates/ical/src/icalendar/object.rs | 59 ++++++++++++++++++----------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/crates/ical/src/icalendar/object.rs b/crates/ical/src/icalendar/object.rs index d31a0a0..d720d20 100644 --- a/crates/ical/src/icalendar/object.rs +++ b/crates/ical/src/icalendar/object.rs @@ -148,6 +148,34 @@ impl CalendarObjectComponent { } Ok(Self::Journal(main_journal, overrides)) } + + pub fn get_first_occurence(&self) -> Result, Error> { + match &self { + Self::Event(main_event, overrides) => Ok(overrides + .iter() + .chain(std::iter::once(main_event)) + .map(super::event::EventObject::get_dtstart) + .collect::, _>>()? + .into_iter() + .flatten() + .min()), + _ => Ok(None), + } + } + + pub fn get_last_occurence(&self) -> Result, Error> { + match &self { + Self::Event(main_event, overrides) => Ok(overrides + .iter() + .chain(std::iter::once(main_event)) + .map(super::event::EventObject::get_last_occurence) + .collect::, _>>()? + .into_iter() + .flatten() + .max()), + _ => Ok(None), + } + } } #[derive(Debug, Clone)] @@ -268,31 +296,11 @@ impl CalendarObject { } pub fn get_first_occurence(&self) -> Result, Error> { - match &self.data { - CalendarObjectComponent::Event(main_event, overrides) => Ok(overrides - .iter() - .chain(std::iter::once(main_event)) - .map(super::event::EventObject::get_dtstart) - .collect::, _>>()? - .into_iter() - .flatten() - .min()), - _ => Ok(None), - } + self.data.get_first_occurence() } pub fn get_last_occurence(&self) -> Result, Error> { - match &self.data { - CalendarObjectComponent::Event(main_event, overrides) => Ok(overrides - .iter() - .chain(std::iter::once(main_event)) - .map(super::event::EventObject::get_last_occurence) - .collect::, _>>()? - .into_iter() - .flatten() - .max()), - _ => Ok(None), - } + self.data.get_last_occurence() } pub fn expand_recurrence( @@ -313,4 +321,11 @@ impl CalendarObject { _ => Ok(self.get_ics().to_string()), } } + + #[must_use] + pub fn get_property(&self, name: &str) -> Option<&Property> { + self.properties + .iter() + .find(|property| property.name == name) + } }