diff --git a/crates/caldav/src/calendar/resource.rs b/crates/caldav/src/calendar/resource.rs index 65d5912..c3e9fea 100644 --- a/crates/caldav/src/calendar/resource.rs +++ b/crates/caldav/src/calendar/resource.rs @@ -17,6 +17,7 @@ use rustical_store::auth::Principal; use rustical_xml::{EnumVariants, PropName}; use rustical_xml::{XmlDeserialize, XmlSerialize}; use serde::Deserialize; +use std::borrow::Cow; #[derive(XmlDeserialize, XmlSerialize, PartialEq, Eq, Clone, EnumVariants, PropName)] #[xml(unit_variants_ident = "CalendarPropName")] @@ -72,8 +73,8 @@ pub struct CalendarResource { } impl ResourceName for CalendarResource { - fn get_name(&self) -> String { - self.cal.id.clone() + fn get_name(&self) -> Cow<'_, str> { + Cow::from(&self.cal.id) } } diff --git a/crates/caldav/src/calendar_object/resource.rs b/crates/caldav/src/calendar_object/resource.rs index 15af050..475f1fa 100644 --- a/crates/caldav/src/calendar_object/resource.rs +++ b/crates/caldav/src/calendar_object/resource.rs @@ -1,3 +1,5 @@ +use std::borrow::Cow; + use super::prop::{ CalendarData, CalendarObjectProp, CalendarObjectPropName, CalendarObjectPropWrapper, CalendarObjectPropWrapperName, @@ -20,8 +22,8 @@ pub struct CalendarObjectResource { } impl ResourceName for CalendarObjectResource { - fn get_name(&self) -> String { - format!("{}.ics", self.object.get_id()) + fn get_name(&self) -> Cow<'_, str> { + Cow::from(format!("{}.ics", self.object.get_id())) } } diff --git a/crates/caldav/src/principal/mod.rs b/crates/caldav/src/principal/mod.rs index 728765b..9662dd9 100644 --- a/crates/caldav/src/principal/mod.rs +++ b/crates/caldav/src/principal/mod.rs @@ -6,6 +6,7 @@ use rustical_dav::xml::{ GroupMemberSet, GroupMembership, Resourcetype, ResourcetypeInner, SupportedReportSet, }; use rustical_store::auth::Principal; +use std::borrow::Cow; mod service; pub use service::*; @@ -23,8 +24,8 @@ pub struct PrincipalResource { } impl ResourceName for PrincipalResource { - fn get_name(&self) -> String { - self.principal.id.clone() + fn get_name(&self) -> Cow<'_, str> { + Cow::from(&self.principal.id) } } diff --git a/crates/carddav/src/address_object/resource.rs b/crates/carddav/src/address_object/resource.rs index 490a74d..cddcee3 100644 --- a/crates/carddav/src/address_object/resource.rs +++ b/crates/carddav/src/address_object/resource.rs @@ -1,3 +1,5 @@ +use std::borrow::Cow; + use crate::{ Error, address_object::{ @@ -22,8 +24,8 @@ pub struct AddressObjectResource { } impl ResourceName for AddressObjectResource { - fn get_name(&self) -> String { - format!("{}.vcf", self.object.get_id()) + fn get_name(&self) -> Cow<'_, str> { + Cow::from(format!("{}.vcf", self.object.get_id())) } } diff --git a/crates/carddav/src/addressbook/resource.rs b/crates/carddav/src/addressbook/resource.rs index fcaea04..94ca550 100644 --- a/crates/carddav/src/addressbook/resource.rs +++ b/crates/carddav/src/addressbook/resource.rs @@ -11,13 +11,14 @@ use rustical_dav::xml::{Resourcetype, ResourcetypeInner, SupportedReportSet}; use rustical_dav_push::DavPushExtension; use rustical_store::Addressbook; use rustical_store::auth::Principal; +use std::borrow::Cow; #[derive(Clone, Debug, From, Into)] pub struct AddressbookResource(pub(crate) Addressbook); impl ResourceName for AddressbookResource { - fn get_name(&self) -> String { - self.0.id.clone() + fn get_name(&self) -> Cow<'_, str> { + Cow::from(&self.0.id) } } diff --git a/crates/carddav/src/principal/mod.rs b/crates/carddav/src/principal/mod.rs index e6f428a..89f4423 100644 --- a/crates/carddav/src/principal/mod.rs +++ b/crates/carddav/src/principal/mod.rs @@ -1,3 +1,5 @@ +use std::borrow::Cow; + use crate::Error; use rustical_dav::extensions::CommonPropertiesExtension; use rustical_dav::privileges::UserPrivilegeSet; @@ -21,8 +23,8 @@ pub struct PrincipalResource { } impl ResourceName for PrincipalResource { - fn get_name(&self) -> String { - self.principal.id.clone() + fn get_name(&self) -> Cow<'_, str> { + Cow::from(&self.principal.id) } } diff --git a/crates/dav/src/resource/mod.rs b/crates/dav/src/resource/mod.rs index 5d4f7ed..fcfc773 100644 --- a/crates/dav/src/resource/mod.rs +++ b/crates/dav/src/resource/mod.rs @@ -11,6 +11,7 @@ pub use resource_service::ResourceService; use rustical_xml::{ EnumVariants, NamespaceOwned, PropName, XmlDeserialize, XmlDocument, XmlSerialize, }; +use std::borrow::Cow; use std::str::FromStr; mod axum_methods; @@ -30,7 +31,7 @@ pub trait ResourcePropName: FromStr {} impl ResourcePropName for T {} pub trait ResourceName { - fn get_name(&self) -> String; + fn get_name(&self) -> Cow<'_, str>; } pub trait Resource: Clone + Send + 'static {