diff options
author | Joris | 2024-01-20 22:08:44 +0100 |
---|---|---|
committer | Joris | 2024-01-20 22:08:44 +0100 |
commit | 36cd29b459bb41bff1cf6d079fd30100bd89cec1 (patch) | |
tree | 1cd3c0b64ab7dd1c35c580e47cdb5fe3b92f8532 /src/model | |
parent | 44a32d874cb0540aede1adcf3e6ef9bd7a928c90 (diff) |
Allow to specify week of month for repetition
Diffstat (limited to 'src/model')
-rw-r--r-- | src/model/repetition.rs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/model/repetition.rs b/src/model/repetition.rs index 360cf5f..07fc4d4 100644 --- a/src/model/repetition.rs +++ b/src/model/repetition.rs @@ -19,7 +19,7 @@ pub enum Frequency { #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub enum DayOfMonth { Day { day: u8 }, - Weekday { weekday: Weekday }, + Weekday { week: u8, day: Weekday }, } pub fn validate_period(str: &str) -> Result<u32, String> { @@ -74,10 +74,10 @@ impl Repetition { None => vec![], }, Frequency::Monthly { - day: DayOfMonth::Weekday { weekday }, + day: DayOfMonth::Weekday { week, day }, } => repeat( - first_weekday_of_month(event, weekday), - Box::new(|d| first_weekday_of_month(next_month(d), weekday)), + day_of_month(event, week, day), + Box::new(|d| day_of_month(next_month(d), week, day)), ), Frequency::Yearly => repeat( // TODO: error handling @@ -97,9 +97,9 @@ impl Repetition { } } -fn first_weekday_of_month(date: NaiveDate, weekday: Weekday) -> NaiveDate { +fn day_of_month(date: NaiveDate, week: u8, day: Weekday) -> NaiveDate { // TODO: error handling - NaiveDate::from_weekday_of_month_opt(date.year(), date.month(), weekday, 1).unwrap() + NaiveDate::from_weekday_of_month_opt(date.year(), date.month(), day, week).unwrap() } fn next_month(date: NaiveDate) -> NaiveDate { @@ -177,7 +177,8 @@ mod tests { fn weekday_of_month() { let repetition = from_freq(Frequency::Monthly { day: DayOfMonth::Weekday { - weekday: Weekday::Tue, + week: 1, + day: Weekday::Tue, }, }); assert_eq!( @@ -228,7 +229,8 @@ mod tests { let repetition = Repetition { frequency: Frequency::Monthly { day: DayOfMonth::Weekday { - weekday: Weekday::Fri, + week: 1, + day: Weekday::Fri, }, }, removed_occurences: HashSet::from([1, 2, 3]), |