rustical_dav/extensions/
synctoken.rs

1use rustical_xml::{EnumUnitVariants, EnumVariants, XmlDeserialize, XmlSerialize};
2
3#[derive(XmlDeserialize, XmlSerialize, PartialEq, Clone, EnumUnitVariants, EnumVariants)]
4#[xml(unit_variants_ident = "SyncTokenExtensionPropName")]
5pub enum SyncTokenExtensionProp {
6    // Collection Synchronization (RFC 6578)
7    #[xml(ns = "crate::namespace::NS_DAV")]
8    SyncToken(String),
9
10    // CalendarServer
11    #[xml(ns = "crate::namespace::NS_CALENDARSERVER")]
12    Getctag(String),
13}
14
15pub trait SyncTokenExtension {
16    fn get_synctoken(&self) -> String;
17
18    fn get_prop(
19        &self,
20        prop: &SyncTokenExtensionPropName,
21    ) -> Result<SyncTokenExtensionProp, crate::Error> {
22        Ok(match &prop {
23            SyncTokenExtensionPropName::SyncToken => {
24                SyncTokenExtensionProp::SyncToken(self.get_synctoken())
25            }
26            SyncTokenExtensionPropName::Getctag => {
27                SyncTokenExtensionProp::Getctag(self.get_synctoken())
28            }
29        })
30    }
31
32    fn set_prop(&self, _prop: SyncTokenExtensionProp) -> Result<(), crate::Error> {
33        Err(crate::Error::PropReadOnly)
34    }
35
36    fn remove_prop(&self, _prop: &SyncTokenExtensionPropName) -> Result<(), crate::Error> {
37        Err(crate::Error::PropReadOnly)
38    }
39}