rustical_store/
addressbook_store.rs1use crate::{CollectionMetadata, Error, addressbook::Addressbook};
2use async_trait::async_trait;
3use rustical_ical::AddressObject;
4
5#[async_trait]
6pub trait AddressbookReadStore: Send + Sync + 'static {
7 async fn get_addressbook(
8 &self,
9 principal: &str,
10 id: &str,
11 show_deleted: bool,
12 ) -> Result<Addressbook, Error>;
13 async fn get_addressbooks(&self, principal: &str) -> Result<Vec<Addressbook>, Error>;
14 async fn get_deleted_addressbooks(&self, principal: &str) -> Result<Vec<Addressbook>, Error>;
15
16 async fn sync_changes(
17 &self,
18 principal: &str,
19 addressbook_id: &str,
20 synctoken: i64,
21 ) -> Result<(Vec<(String, AddressObject)>, Vec<String>, i64), Error>;
22
23 async fn addressbook_metadata(
24 &self,
25 principal: &str,
26 addressbook_id: &str,
27 ) -> Result<CollectionMetadata, Error>;
28
29 async fn get_objects(
30 &self,
31 principal: &str,
32 addressbook_id: &str,
33 ) -> Result<Vec<(String, AddressObject)>, Error>;
34 async fn get_object(
35 &self,
36 principal: &str,
37 addressbook_id: &str,
38 object_id: &str,
39 show_deleted: bool,
40 ) -> Result<AddressObject, Error>;
41}
42
43#[async_trait]
44pub trait AddressbookWriteStore: Send + Sync + 'static {
45 async fn update_addressbook(
46 &self,
47 principal: &str,
48 id: &str,
49 addressbook: Addressbook,
50 ) -> Result<(), Error>;
51 async fn insert_addressbook(&self, addressbook: Addressbook) -> Result<(), Error>;
52
53 async fn delete_addressbook(
54 &self,
55 principal: &str,
56 name: &str,
57 use_trashbin: bool,
58 ) -> Result<(), Error>;
59 async fn restore_addressbook(&self, principal: &str, name: &str) -> Result<(), Error>;
60
61 async fn put_object(
62 &self,
63 principal: &str,
64 addressbook_id: &str,
65 object_id: &str,
66 object: AddressObject,
67 overwrite: bool,
68 ) -> Result<(), Error>;
69
70 async fn delete_object(
71 &self,
72 principal: &str,
73 addressbook_id: &str,
74 object_id: &str,
75 use_trashbin: bool,
76 ) -> Result<(), Error>;
77
78 async fn restore_object(
79 &self,
80 principal: &str,
81 addressbook_id: &str,
82 object_id: &str,
83 ) -> Result<(), Error>;
84
85 async fn import_addressbook(
86 &self,
87 addressbook: Addressbook,
88 objects: Vec<(String, AddressObject)>,
89 merge_existing: bool,
90 ) -> Result<(), Error>;
91}
92
93pub trait AddressbookStore: AddressbookReadStore + AddressbookWriteStore {}
94
95impl<T: AddressbookReadStore + AddressbookWriteStore> AddressbookStore for T {}