aboutsummaryrefslogtreecommitdiff
path: root/src/domain/recurrence.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/domain/recurrence.rs')
-rw-r--r--src/domain/recurrence.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/domain/recurrence.rs b/src/domain/recurrence.rs
new file mode 100644
index 0000000..807df4b
--- /dev/null
+++ b/src/domain/recurrence.rs
@@ -0,0 +1,36 @@
+use chrono::{DateTime, Utc};
+use getset::Getters;
+
+#[derive(Clone, Debug, Getters)]
+#[getset(get = "pub")]
+pub struct RecurrenceRule {
+ frequency: Frequency,
+ interval: u32,
+ end_date: Option<DateTime<Utc>>
+}
+
+#[derive(Clone, Debug)]
+pub enum Frequency {
+ DAILY,
+ WEEKLY,
+ MONTHLY,
+ YEARLY
+}
+
+impl RecurrenceRule {
+ pub fn new(
+ frequency: Frequency,
+ interval: u32,
+ end_date: Option<DateTime<Utc>>
+ ) -> Result<Self, String> {
+ 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 })
+ }
+}