From 8eb46523a340e6acb244575f3c267e1d1c9ddf8a Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Sat, 19 Apr 2025 12:43:32 +0200 Subject: [PATCH] dav: Outsource PrincipalResource AT to where it's actually needed --- crates/caldav/src/calendar/resource.rs | 5 ++++- crates/caldav/src/calendar_object/resource.rs | 5 ++++- crates/caldav/src/calendar_set/mod.rs | 5 ++++- crates/caldav/src/principal/mod.rs | 5 ++++- crates/carddav/src/address_object/resource.rs | 5 ++++- crates/carddav/src/addressbook/resource.rs | 5 ++++- crates/carddav/src/principal/mod.rs | 5 ++++- crates/dav/src/extensions/common.rs | 4 ++-- crates/dav/src/resource/mod.rs | 1 - crates/dav/src/resources/root.rs | 5 ++++- 10 files changed, 34 insertions(+), 11 deletions(-) diff --git a/crates/caldav/src/calendar/resource.rs b/crates/caldav/src/calendar/resource.rs index cd62e41..1d3eedc 100644 --- a/crates/caldav/src/calendar/resource.rs +++ b/crates/caldav/src/calendar/resource.rs @@ -100,10 +100,13 @@ impl DavPushExtension for CalendarResource { } } +impl CommonPropertiesExtension for CalendarResource { + type PrincipalResource = PrincipalResource; +} + impl Resource for CalendarResource { type Prop = CalendarPropWrapper; type Error = Error; - type PrincipalResource = PrincipalResource; type Principal = User; fn get_resourcetype(&self) -> Resourcetype { diff --git a/crates/caldav/src/calendar_object/resource.rs b/crates/caldav/src/calendar_object/resource.rs index dd800ad..c6983a8 100644 --- a/crates/caldav/src/calendar_object/resource.rs +++ b/crates/caldav/src/calendar_object/resource.rs @@ -51,10 +51,13 @@ pub struct CalendarObjectResource { pub principal: String, } +impl CommonPropertiesExtension for CalendarObjectResource { + type PrincipalResource = PrincipalResource; +} + impl Resource for CalendarObjectResource { type Prop = CalendarObjectPropWrapper; type Error = Error; - type PrincipalResource = PrincipalResource; type Principal = User; fn get_resourcetype(&self) -> Resourcetype { diff --git a/crates/caldav/src/calendar_set/mod.rs b/crates/caldav/src/calendar_set/mod.rs index bc3d995..c17b392 100644 --- a/crates/caldav/src/calendar_set/mod.rs +++ b/crates/caldav/src/calendar_set/mod.rs @@ -24,10 +24,13 @@ pub enum PrincipalPropWrapper { Common(CommonPropertiesProp), } +impl CommonPropertiesExtension for CalendarSetResource { + type PrincipalResource = PrincipalResource; +} + impl Resource for CalendarSetResource { type Prop = PrincipalPropWrapper; type Error = Error; - type PrincipalResource = PrincipalResource; type Principal = User; fn get_resourcetype(&self) -> Resourcetype { diff --git a/crates/caldav/src/principal/mod.rs b/crates/caldav/src/principal/mod.rs index 1ba14df..f51b374 100644 --- a/crates/caldav/src/principal/mod.rs +++ b/crates/caldav/src/principal/mod.rs @@ -61,10 +61,13 @@ impl NamedRoute for PrincipalResource { } } +impl CommonPropertiesExtension for PrincipalResource { + type PrincipalResource = Self; +} + impl Resource for PrincipalResource { type Prop = PrincipalPropWrapper; type Error = Error; - type PrincipalResource = PrincipalResource; type Principal = User; fn get_resourcetype(&self) -> Resourcetype { diff --git a/crates/carddav/src/address_object/resource.rs b/crates/carddav/src/address_object/resource.rs index 0d4b899..ae5ba62 100644 --- a/crates/carddav/src/address_object/resource.rs +++ b/crates/carddav/src/address_object/resource.rs @@ -47,10 +47,13 @@ pub struct AddressObjectResource { pub principal: String, } +impl CommonPropertiesExtension for AddressObjectResource { + type PrincipalResource = PrincipalResource; +} + impl Resource for AddressObjectResource { type Prop = AddressObjectPropWrapper; type Error = Error; - type PrincipalResource = PrincipalResource; type Principal = User; fn get_resourcetype(&self) -> Resourcetype { diff --git a/crates/carddav/src/addressbook/resource.rs b/crates/carddav/src/addressbook/resource.rs index 17c5725..80107ef 100644 --- a/crates/carddav/src/addressbook/resource.rs +++ b/crates/carddav/src/addressbook/resource.rs @@ -80,10 +80,13 @@ impl DavPushExtension for AddressbookResource { } } +impl CommonPropertiesExtension for AddressbookResource { + type PrincipalResource = PrincipalResource; +} + impl Resource for AddressbookResource { type Prop = AddressbookPropWrapper; type Error = Error; - type PrincipalResource = PrincipalResource; type Principal = User; fn get_resourcetype(&self) -> Resourcetype { diff --git a/crates/carddav/src/principal/mod.rs b/crates/carddav/src/principal/mod.rs index 63c3d9d..92f2630 100644 --- a/crates/carddav/src/principal/mod.rs +++ b/crates/carddav/src/principal/mod.rs @@ -70,10 +70,13 @@ impl NamedRoute for PrincipalResource { } } +impl CommonPropertiesExtension for PrincipalResource { + type PrincipalResource = Self; +} + impl Resource for PrincipalResource { type Prop = PrincipalPropWrapper; type Error = Error; - type PrincipalResource = PrincipalResource; type Principal = User; fn get_resourcetype(&self) -> Resourcetype { diff --git a/crates/dav/src/extensions/common.rs b/crates/dav/src/extensions/common.rs index f2c797f..0e9d176 100644 --- a/crates/dav/src/extensions/common.rs +++ b/crates/dav/src/extensions/common.rs @@ -28,6 +28,8 @@ pub enum CommonPropertiesProp { } pub trait CommonPropertiesExtension: Resource { + type PrincipalResource: NamedRoute; + fn get_prop( &self, rmap: &ResourceMap, @@ -66,5 +68,3 @@ pub trait CommonPropertiesExtension: Resource { Err(crate::Error::PropReadOnly) } } - -impl CommonPropertiesExtension for T {} diff --git a/crates/dav/src/resource/mod.rs b/crates/dav/src/resource/mod.rs index c167d6d..2e15228 100644 --- a/crates/dav/src/resource/mod.rs +++ b/crates/dav/src/resource/mod.rs @@ -26,7 +26,6 @@ impl ResourcePropName for T {} pub trait Resource: Clone + 'static { type Prop: ResourceProp + PartialEq + Clone + EnumVariants + EnumUnitVariants; type Error: ResponseError + From; - type PrincipalResource: Resource + NamedRoute; type Principal: Principal; fn get_resourcetype(&self) -> Resourcetype; diff --git a/crates/dav/src/resources/root.rs b/crates/dav/src/resources/root.rs index 14c54e6..845b7a4 100644 --- a/crates/dav/src/resources/root.rs +++ b/crates/dav/src/resources/root.rs @@ -18,10 +18,13 @@ impl Default for RootResource { } } +impl CommonPropertiesExtension for RootResource { + type PrincipalResource = PR; +} + impl Resource for RootResource { type Prop = CommonPropertiesProp; type Error = PR::Error; - type PrincipalResource = PR; type Principal = P; fn get_resourcetype(&self) -> Resourcetype {