rustical_store/
calendar.rs1use crate::synctoken::format_synctoken;
2use chrono::NaiveDateTime;
3use rustical_ical::CalendarObjectType;
4use serde::{Deserialize, Serialize};
5use std::str::FromStr;
6
7#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq)]
8pub struct CalendarMetadata {
9 pub displayname: Option<String>,
11 pub order: i64,
12 pub description: Option<String>,
13 pub color: Option<String>,
14}
15
16#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq)]
17pub struct Calendar {
18 #[serde(flatten)]
20 pub meta: CalendarMetadata,
21
22 pub principal: String,
24 pub id: String,
25 pub timezone_id: Option<String>,
26 pub deleted_at: Option<NaiveDateTime>,
27 pub synctoken: i64,
28 pub subscription_url: Option<String>,
29 pub push_topic: String,
30 pub components: Vec<CalendarObjectType>,
31}
32
33impl Calendar {
34 #[must_use]
35 pub fn format_synctoken(&self) -> String {
36 format_synctoken(self.synctoken)
37 }
38
39 #[must_use]
40 pub fn get_timezone(&self) -> Option<chrono_tz::Tz> {
41 self.timezone_id
42 .as_ref()
43 .and_then(|tzid| chrono_tz::Tz::from_str(tzid).ok())
44 }
45
46 #[must_use]
47 pub fn get_vtimezone(&self) -> Option<&'static str> {
48 self.timezone_id
49 .as_ref()
50 .and_then(|tzid| vtimezones_rs::VTIMEZONES.get(tzid).copied())
51 }
52}