aboutsummaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
authorJoris2024-01-20 22:08:44 +0100
committerJoris2024-01-20 22:08:44 +0100
commit36cd29b459bb41bff1cf6d079fd30100bd89cec1 (patch)
tree1cd3c0b64ab7dd1c35c580e47cdb5fe3b92f8532 /src/model
parent44a32d874cb0540aede1adcf3e6ef9bd7a928c90 (diff)
Allow to specify week of month for repetition
Diffstat (limited to 'src/model')
-rw-r--r--src/model/repetition.rs18
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]),