ResourceName trait: Use Cow instead of String

This commit is contained in:
Lennart
2025-12-31 10:57:12 +01:00
parent 9c3972e21c
commit 578ddde36d
7 changed files with 23 additions and 13 deletions

View File

@@ -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)
}
}

View File

@@ -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()))
}
}

View File

@@ -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)
}
}

View File

@@ -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()))
}
}

View File

@@ -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)
}
}

View File

@@ -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)
}
}

View File

@@ -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<T: FromStr> ResourcePropName for T {}
pub trait ResourceName {
fn get_name(&self) -> String;
fn get_name(&self) -> Cow<'_, str>;
}
pub trait Resource: Clone + Send + 'static {