1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
use crate::{ shared::{ entity::{Entity, ID}, metadata::Metadata, }, Meta, }; use chrono_tz::{Tz, UTC}; #[derive(Debug, Clone)] pub struct Calendar { pub id: ID, pub user_id: ID, pub account_id: ID, pub settings: CalendarSettings, pub metadata: Metadata, } impl Meta for Calendar { fn metadata(&self) -> &Metadata { &self.metadata } fn account_id(&self) -> &ID { &self.account_id } } #[derive(Debug, Clone)] pub struct CalendarSettings { pub week_start: isize, pub timezone: Tz, } impl CalendarSettings { pub fn set_week_start(&mut self, wkst: isize) -> bool { if (0..=6).contains(&wkst) { self.week_start = wkst; true } else { false } } pub fn set_timezone(&mut self, timezone: &str) -> bool { match timezone.parse::<Tz>() { Ok(tzid) => { self.timezone = tzid; true } Err(_) => false, } } } impl Default for CalendarSettings { fn default() -> Self { Self { week_start: 0, timezone: UTC, } } } impl Calendar { pub fn new(user_id: &ID, account_id: &ID) -> Self { Self { id: Default::default(), user_id: user_id.clone(), account_id: account_id.clone(), settings: Default::default(), metadata: Default::default(), } } } impl Entity for Calendar { fn id(&self) -> &ID { &self.id } }