resourcetype: Use tuple struct

This commit is contained in:
Lennart
2025-01-05 16:44:31 +01:00
parent 82f52cc0ab
commit 2eb6b1934d
8 changed files with 67 additions and 84 deletions

View File

@@ -99,31 +99,27 @@ impl Resource for CalendarResource {
fn get_resourcetype(&self) -> Resourcetype {
if self.0.subscription_url.is_none() {
Resourcetype {
inner: &[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_CALDAV,
name: "calendar",
},
],
}
Resourcetype(&[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_CALDAV,
name: "calendar",
},
])
} else {
Resourcetype {
inner: &[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_CALENDARSERVER,
name: "subscribed",
},
],
}
Resourcetype(&[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_CALENDARSERVER,
name: "subscribed",
},
])
}
}

View File

@@ -55,7 +55,7 @@ impl Resource for CalendarObjectResource {
type PrincipalResource = PrincipalResource;
fn get_resourcetype(&self) -> Resourcetype {
Resourcetype { inner: &[] }
Resourcetype(&[])
}
fn get_prop(

View File

@@ -58,18 +58,16 @@ impl Resource for PrincipalResource {
type PrincipalResource = PrincipalResource;
fn get_resourcetype(&self) -> Resourcetype {
Resourcetype {
inner: &[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "principal",
},
],
}
Resourcetype(&[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "principal",
},
])
}
fn get_prop(

View File

@@ -56,7 +56,7 @@ impl Resource for AddressObjectResource {
type PrincipalResource = PrincipalResource;
fn get_resourcetype(&self) -> Resourcetype {
Resourcetype { inner: &[] }
Resourcetype(&[])
}
fn get_prop(

View File

@@ -71,18 +71,16 @@ impl Resource for AddressbookResource {
type PrincipalResource = PrincipalResource;
fn get_resourcetype(&self) -> Resourcetype {
Resourcetype {
inner: &[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_CARDDAV,
name: "addressbook",
},
],
}
Resourcetype(&[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_CARDDAV,
name: "addressbook",
},
])
}
fn get_prop(

View File

@@ -59,18 +59,16 @@ impl Resource for PrincipalResource {
type PrincipalResource = PrincipalResource;
fn get_resourcetype(&self) -> Resourcetype {
Resourcetype {
inner: &[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "principal",
},
],
}
Resourcetype(&[
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "collection",
},
ResourcetypeInner {
ns: rustical_dav::namespace::NS_DAV,
name: "principal",
},
])
}
fn get_prop(

View File

@@ -39,12 +39,10 @@ impl<PR: Resource> Resource for RootResource<PR> {
type PrincipalResource = PR;
fn get_resourcetype(&self) -> Resourcetype {
Resourcetype {
inner: &[ResourcetypeInner {
ns: crate::namespace::NS_DAV,
name: "collection",
}],
}
Resourcetype(&[ResourcetypeInner {
ns: crate::namespace::NS_DAV,
name: "collection",
}])
}
fn get_prop(

View File

@@ -1,10 +1,7 @@
use rustical_xml::XmlSerialize;
#[derive(Debug, Clone, PartialEq, XmlSerialize)]
pub struct Resourcetype {
#[xml(flatten, ty = "untagged")]
pub inner: &'static [ResourcetypeInner],
}
pub struct Resourcetype(#[xml(flatten, ty = "untagged")] pub &'static [ResourcetypeInner]);
#[derive(Debug, Clone, PartialEq, XmlSerialize)]
pub struct ResourcetypeInner {
@@ -31,18 +28,16 @@ mod tests {
let mut buf = Vec::new();
let mut writer = quick_xml::Writer::new(&mut buf);
Document {
resourcetype: Resourcetype {
inner: &[
ResourcetypeInner {
ns: crate::namespace::NS_DAV,
name: "displayname",
},
ResourcetypeInner {
ns: crate::namespace::NS_CALENDARSERVER,
name: "calendar-color",
},
],
},
resourcetype: Resourcetype(&[
ResourcetypeInner {
ns: crate::namespace::NS_DAV,
name: "displayname",
},
ResourcetypeInner {
ns: crate::namespace::NS_CALENDARSERVER,
name: "calendar-color",
},
]),
}
.serialize_root(&mut writer)
.unwrap();