principal: Implement principal-collection-set

This commit is contained in:
Lennart
2025-06-12 15:31:34 +02:00
parent 9e5eaa5e1c
commit f857d68760
7 changed files with 32 additions and 5 deletions

View File

@@ -22,8 +22,11 @@ pub use error::Error;
pub struct CalDavPrincipalUri(&'static str);
impl PrincipalUri for CalDavPrincipalUri {
fn principal_collection(&self) -> String {
format!("{}/principal/", self.0)
}
fn principal_uri(&self, principal: &str) -> String {
format!("{}/principal/{}/", self.0, principal)
format!("{}{}/", self.principal_collection(), principal)
}
}

View File

@@ -74,6 +74,11 @@ impl Resource for PrincipalResource {
))
}
PrincipalPropName::AlternateUriSet => PrincipalProp::AlternateUriSet,
PrincipalPropName::PrincipalCollectionSet => {
PrincipalProp::PrincipalCollectionSet(PrincipalCollectionSet(
puri.principal_collection().into(),
))
}
})
}
PrincipalPropWrapperName::Common(prop) => PrincipalPropWrapper::Common(

View File

@@ -18,6 +18,8 @@ pub enum PrincipalProp {
GroupMembership(GroupMembership),
#[xml(ns = "rustical_dav::namespace::NS_DAV", rename = b"alternate-URI-set")]
AlternateUriSet,
#[xml(ns = "rustical_dav::namespace::NS_DAV")]
PrincipalCollectionSet(PrincipalCollectionSet),
// CalDAV (RFC 4791)
#[xml(ns = "rustical_dav::namespace::NS_CALDAV")]
@@ -36,3 +38,6 @@ pub struct CalendarHomeSet(#[xml(ty = "untagged", flatten)] pub(super) Vec<HrefE
#[derive(XmlDeserialize, XmlSerialize, PartialEq, Clone)]
pub struct GroupMembership(#[xml(ty = "untagged", flatten)] pub(super) Vec<HrefElement>);
#[derive(XmlDeserialize, XmlSerialize, PartialEq, Clone)]
pub struct PrincipalCollectionSet(#[xml(ty = "untagged")] pub(super) HrefElement);