From 1445e23a26c6581ad0c3f5b5016e47e95d224e9f Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 20 Feb 2022 09:33:55 +0100 Subject: Save repetition in events But don’t show repetead events for now. --- src/model/event.rs | 14 +++++++++++++- src/model/mod.rs | 1 + src/model/repetition.rs | 26 ++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/model/repetition.rs (limited to 'src/model') diff --git a/src/model/event.rs b/src/model/event.rs index 7ab0244..3765fec 100644 --- a/src/model/event.rs +++ b/src/model/event.rs @@ -2,6 +2,8 @@ use chrono::Timelike; use chrono::{NaiveDate, NaiveTime}; use uuid::Uuid; +use crate::model::repetition::Repetition; + pub static DATE_FORMAT: &str = "%d/%m/%Y"; #[derive(Debug, Clone)] @@ -11,6 +13,7 @@ pub struct Event { pub start: Option, pub end: Option, pub name: String, + pub repetition: Option, } pub fn init(date: NaiveDate) -> Event { @@ -20,6 +23,7 @@ pub fn init(date: NaiveDate) -> Event { start: None, end: None, name: "".to_string(), + repetition: None, } } @@ -62,7 +66,14 @@ fn parse_time(t: &str) -> Option { // Validation -pub fn validate(id: Uuid, date: String, name: String, start: String, end: String) -> Option { +pub fn validate( + id: Uuid, + date: String, + name: String, + start: String, + end: String, + repetition: Option, +) -> Option { let start = validate_time(start)?; let end = validate_time(end)?; @@ -77,6 +88,7 @@ pub fn validate(id: Uuid, date: String, name: String, start: String, end: String name: validate_name(name)?, start, end, + repetition, }) } diff --git a/src/model/mod.rs b/src/model/mod.rs index 53f1126..c1beb62 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -1 +1,2 @@ pub mod event; +pub mod repetition; diff --git a/src/model/repetition.rs b/src/model/repetition.rs new file mode 100644 index 0000000..80387d9 --- /dev/null +++ b/src/model/repetition.rs @@ -0,0 +1,26 @@ +use chrono::Weekday; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] +pub enum Repetition { + Daily { frequency: u8 }, + Monthly { frequency: MonthFrequency }, + Yearly, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] +pub enum MonthFrequency { + Day { day: u8 }, + FirstDay { day: Weekday }, +} + +// Validation + +pub fn validate_day(str: &str) -> Option { + let n = str.parse::().ok()?; + if n >= 1 && n <= 31 { + Some(n) + } else { + None + } +} -- cgit v1.2.3