Skip to main content

rustical_store/
addressbook_store.rs

1use 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 {}