rustical_caldav/calendar_object/
prop.rs

1use rustical_dav::extensions::CommonPropertiesProp;
2use rustical_ical::UtcDateTime;
3use rustical_xml::{EnumVariants, PropName, Unparsed, XmlDeserialize, XmlSerialize};
4
5#[derive(XmlDeserialize, XmlSerialize, PartialEq, Eq, Clone, EnumVariants, PropName)]
6#[xml(unit_variants_ident = "CalendarObjectPropName")]
7pub enum CalendarObjectProp {
8    // WebDAV (RFC 2518)
9    #[xml(ns = "rustical_dav::namespace::NS_DAV")]
10    Getetag(String),
11    #[xml(ns = "rustical_dav::namespace::NS_DAV", skip_deserializing)]
12    Getcontenttype(&'static str),
13
14    // CalDAV (RFC 4791)
15    #[xml(ns = "rustical_dav::namespace::NS_CALDAV")]
16    #[xml(prop = "CalendarData")]
17    CalendarData(String),
18}
19
20#[derive(XmlDeserialize, XmlSerialize, PartialEq, Eq, Clone, EnumVariants, PropName)]
21#[xml(unit_variants_ident = "CalendarObjectPropWrapperName", untagged)]
22pub enum CalendarObjectPropWrapper {
23    CalendarObject(CalendarObjectProp),
24    Common(CommonPropertiesProp),
25}
26
27#[derive(XmlDeserialize, Clone, Debug, PartialEq, Eq, Hash)]
28pub struct ExpandElement {
29    #[xml(ty = "attr")]
30    pub(crate) start: UtcDateTime,
31    #[xml(ty = "attr")]
32    pub(crate) end: UtcDateTime,
33}
34
35#[derive(XmlDeserialize, Clone, Debug, PartialEq, Default, Eq, Hash)]
36pub struct CalendarData {
37    #[xml(ns = "rustical_dav::namespace::NS_CALDAV")]
38    pub(crate) comp: Option<Unparsed>,
39    #[xml(ns = "rustical_dav::namespace::NS_CALDAV")]
40    pub(crate) prop: Option<Unparsed>,
41    #[xml(ns = "rustical_dav::namespace::NS_CALDAV")]
42    pub(crate) expand: Option<ExpandElement>,
43    #[xml(ns = "rustical_dav::namespace::NS_CALDAV")]
44    pub(crate) limit_recurrence_set: Option<()>,
45    #[xml(ns = "rustical_dav::namespace::NS_CALDAV")]
46    pub(crate) limit_freebusy_set: Option<()>,
47}