use chrono::{DateTime, Utc}; use getset::Getters; #[derive(Clone, Debug, Getters)] #[getset(get = "pub")] pub struct RecurrenceRule { frequency: Frequency, interval: u32, end_date: Option> } #[derive(Clone, Debug)] pub enum Frequency { DAILY, WEEKLY, MONTHLY, YEARLY } impl RecurrenceRule { pub fn new( frequency: Frequency, interval: u32, end_date: Option> ) -> Result { let now = Utc::now(); if let Some(end) = end_date { if now >= end { return Err("End date has already passed".to_string()); } } Ok(Self { frequency, interval, end_date }) } }