1use crate::{Calendar, CollectionMetadata, error::Error};
2use async_trait::async_trait;
3use chrono::NaiveDate;
4use rustical_ical::CalendarObject;
5
6#[derive(Default, Debug, Clone, PartialEq, Eq)]
7pub struct CalendarQuery {
8 pub time_start: Option<NaiveDate>,
9 pub time_end: Option<NaiveDate>,
10}
11
12#[async_trait]
13pub trait CalendarStore: Send + Sync + 'static {
14 async fn get_calendar(
15 &self,
16 principal: &str,
17 id: &str,
18 show_deleted: bool,
19 ) -> Result<Calendar, Error>;
20 async fn get_calendars(&self, principal: &str) -> Result<Vec<Calendar>, Error>;
21 async fn get_deleted_calendars(&self, principal: &str) -> Result<Vec<Calendar>, Error>;
22
23 async fn update_calendar(
24 &self,
25 principal: &str,
26 id: &str,
27 calendar: Calendar,
28 ) -> Result<(), Error>;
29 async fn insert_calendar(&self, calendar: Calendar) -> Result<(), Error>;
30 async fn delete_calendar(
31 &self,
32 principal: &str,
33 name: &str,
34 use_trashbin: bool,
35 ) -> Result<(), Error>;
36 async fn restore_calendar(&self, principal: &str, name: &str) -> Result<(), Error>;
37 async fn import_calendar(
38 &self,
39 calendar: Calendar,
40 objects: Vec<CalendarObject>,
41 merge_existing: bool,
42 ) -> Result<(), Error>;
43
44 async fn sync_changes(
45 &self,
46 principal: &str,
47 cal_id: &str,
48 synctoken: i64,
49 ) -> Result<(Vec<(String, CalendarObject)>, Vec<String>, i64), Error>;
50
51 async fn calendar_query(
54 &self,
55 principal: &str,
56 cal_id: &str,
57 _query: CalendarQuery,
58 ) -> Result<Vec<(String, CalendarObject)>, Error> {
59 self.get_objects(principal, cal_id).await
60 }
61
62 async fn calendar_metadata(
63 &self,
64 principal: &str,
65 cal_id: &str,
66 ) -> Result<CollectionMetadata, Error>;
67
68 async fn get_objects(
69 &self,
70 principal: &str,
71 cal_id: &str,
72 ) -> Result<Vec<(String, CalendarObject)>, Error>;
73 async fn get_object(
74 &self,
75 principal: &str,
76 cal_id: &str,
77 object_id: &str,
78 show_deleted: bool,
79 ) -> Result<CalendarObject, Error>;
80 async fn put_objects(
81 &self,
82 principal: &str,
83 cal_id: &str,
84 objects: Vec<(String, CalendarObject)>,
85 overwrite: bool,
86 ) -> Result<(), Error>;
87 async fn put_object(
88 &self,
89 principal: &str,
90 cal_id: &str,
91 object_id: &str,
92 object: CalendarObject,
93 overwrite: bool,
94 ) -> Result<(), Error> {
95 self.put_objects(
96 principal,
97 cal_id,
98 vec![(object_id.to_owned(), object)],
99 overwrite,
100 )
101 .await
102 }
103 async fn delete_object(
104 &self,
105 principal: &str,
106 cal_id: &str,
107 object_id: &str,
108 use_trashbin: bool,
109 ) -> Result<(), Error>;
110 async fn restore_object(
111 &self,
112 principal: &str,
113 cal_id: &str,
114 object_id: &str,
115 ) -> Result<(), Error>;
116
117 fn is_read_only(&self, cal_id: &str) -> bool;
119}