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::{EnumVariants, PropName};
use rustical_xml::{XmlDeserialize, XmlSerialize}; use rustical_xml::{XmlDeserialize, XmlSerialize};
use serde::Deserialize; use serde::Deserialize;
use std::borrow::Cow;
#[derive(XmlDeserialize, XmlSerialize, PartialEq, Eq, Clone, EnumVariants, PropName)] #[derive(XmlDeserialize, XmlSerialize, PartialEq, Eq, Clone, EnumVariants, PropName)]
#[xml(unit_variants_ident = "CalendarPropName")] #[xml(unit_variants_ident = "CalendarPropName")]
@@ -72,8 +73,8 @@ pub struct CalendarResource {
} }
impl ResourceName for CalendarResource { impl ResourceName for CalendarResource {
fn get_name(&self) -> String { fn get_name(&self) -> Cow<'_, str> {
self.cal.id.clone() Cow::from(&self.cal.id)
} }
} }

View File

@@ -1,3 +1,5 @@
use std::borrow::Cow;
use super::prop::{ use super::prop::{
CalendarData, CalendarObjectProp, CalendarObjectPropName, CalendarObjectPropWrapper, CalendarData, CalendarObjectProp, CalendarObjectPropName, CalendarObjectPropWrapper,
CalendarObjectPropWrapperName, CalendarObjectPropWrapperName,
@@ -20,8 +22,8 @@ pub struct CalendarObjectResource {
} }
impl ResourceName for CalendarObjectResource { impl ResourceName for CalendarObjectResource {
fn get_name(&self) -> String { fn get_name(&self) -> Cow<'_, str> {
format!("{}.ics", self.object.get_id()) Cow::from(format!("{}.ics", self.object.get_id()))
} }
} }

View File

@@ -6,6 +6,7 @@ use rustical_dav::xml::{
GroupMemberSet, GroupMembership, Resourcetype, ResourcetypeInner, SupportedReportSet, GroupMemberSet, GroupMembership, Resourcetype, ResourcetypeInner, SupportedReportSet,
}; };
use rustical_store::auth::Principal; use rustical_store::auth::Principal;
use std::borrow::Cow;
mod service; mod service;
pub use service::*; pub use service::*;
@@ -23,8 +24,8 @@ pub struct PrincipalResource {
} }
impl ResourceName for PrincipalResource { impl ResourceName for PrincipalResource {
fn get_name(&self) -> String { fn get_name(&self) -> Cow<'_, str> {
self.principal.id.clone() Cow::from(&self.principal.id)
} }
} }

View File

@@ -1,3 +1,5 @@
use std::borrow::Cow;
use crate::{ use crate::{
Error, Error,
address_object::{ address_object::{
@@ -22,8 +24,8 @@ pub struct AddressObjectResource {
} }
impl ResourceName for AddressObjectResource { impl ResourceName for AddressObjectResource {
fn get_name(&self) -> String { fn get_name(&self) -> Cow<'_, str> {
format!("{}.vcf", self.object.get_id()) 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_dav_push::DavPushExtension;
use rustical_store::Addressbook; use rustical_store::Addressbook;
use rustical_store::auth::Principal; use rustical_store::auth::Principal;
use std::borrow::Cow;
#[derive(Clone, Debug, From, Into)] #[derive(Clone, Debug, From, Into)]
pub struct AddressbookResource(pub(crate) Addressbook); pub struct AddressbookResource(pub(crate) Addressbook);
impl ResourceName for AddressbookResource { impl ResourceName for AddressbookResource {
fn get_name(&self) -> String { fn get_name(&self) -> Cow<'_, str> {
self.0.id.clone() Cow::from(&self.0.id)
} }
} }

View File

@@ -1,3 +1,5 @@
use std::borrow::Cow;
use crate::Error; use crate::Error;
use rustical_dav::extensions::CommonPropertiesExtension; use rustical_dav::extensions::CommonPropertiesExtension;
use rustical_dav::privileges::UserPrivilegeSet; use rustical_dav::privileges::UserPrivilegeSet;
@@ -21,8 +23,8 @@ pub struct PrincipalResource {
} }
impl ResourceName for PrincipalResource { impl ResourceName for PrincipalResource {
fn get_name(&self) -> String { fn get_name(&self) -> Cow<'_, str> {
self.principal.id.clone() Cow::from(&self.principal.id)
} }
} }

View File

@@ -11,6 +11,7 @@ pub use resource_service::ResourceService;
use rustical_xml::{ use rustical_xml::{
EnumVariants, NamespaceOwned, PropName, XmlDeserialize, XmlDocument, XmlSerialize, EnumVariants, NamespaceOwned, PropName, XmlDeserialize, XmlDocument, XmlSerialize,
}; };
use std::borrow::Cow;
use std::str::FromStr; use std::str::FromStr;
mod axum_methods; mod axum_methods;
@@ -30,7 +31,7 @@ pub trait ResourcePropName: FromStr {}
impl<T: FromStr> ResourcePropName for T {} impl<T: FromStr> ResourcePropName for T {}
pub trait ResourceName { pub trait ResourceName {
fn get_name(&self) -> String; fn get_name(&self) -> Cow<'_, str>;
} }
pub trait Resource: Clone + Send + 'static { pub trait Resource: Clone + Send + 'static {