mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 22:52:22 +00:00
refactor from file to resource
This commit is contained in:
@@ -221,10 +221,10 @@ impl Resource for CalendarResource {
|
||||
impl<C: CalendarStore + ?Sized> ResourceService for CalendarResourceService<C> {
|
||||
type MemberType = EventResource;
|
||||
type PathComponents = (String, String); // principal, calendar_id
|
||||
type File = CalendarResource;
|
||||
type Resource = CalendarResource;
|
||||
type Error = Error;
|
||||
|
||||
async fn get_file(&self) -> Result<Self::File, Error> {
|
||||
async fn get_resource(&self) -> Result<Self::Resource, Error> {
|
||||
let calendar = self
|
||||
.cal_store
|
||||
.read()
|
||||
@@ -270,7 +270,7 @@ impl<C: CalendarStore + ?Sized> ResourceService for CalendarResourceService<C> {
|
||||
})
|
||||
}
|
||||
|
||||
async fn save_file(&self, file: Self::File) -> Result<(), Self::Error> {
|
||||
async fn save_resource(&self, file: Self::Resource) -> Result<(), Self::Error> {
|
||||
self.cal_store
|
||||
.write()
|
||||
.await
|
||||
@@ -283,7 +283,7 @@ impl<C: CalendarStore + ?Sized> ResourceService for CalendarResourceService<C> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn delete_file(&self, use_trashbin: bool) -> Result<(), Self::Error> {
|
||||
async fn delete_resource(&self, use_trashbin: bool) -> Result<(), Self::Error> {
|
||||
self.cal_store
|
||||
.write()
|
||||
.await
|
||||
|
||||
@@ -66,7 +66,7 @@ impl Resource for EventResource {
|
||||
#[async_trait(?Send)]
|
||||
impl<C: CalendarStore + ?Sized> ResourceService for EventResourceService<C> {
|
||||
type PathComponents = (String, String, String); // principal, calendar, event
|
||||
type File = EventResource;
|
||||
type Resource = EventResource;
|
||||
type MemberType = EventResource;
|
||||
type Error = Error;
|
||||
|
||||
@@ -96,7 +96,7 @@ impl<C: CalendarStore + ?Sized> ResourceService for EventResourceService<C> {
|
||||
})
|
||||
}
|
||||
|
||||
async fn get_file(&self) -> Result<Self::File, Self::Error> {
|
||||
async fn get_resource(&self) -> Result<Self::Resource, Self::Error> {
|
||||
let event = self
|
||||
.cal_store
|
||||
.read()
|
||||
@@ -106,11 +106,11 @@ impl<C: CalendarStore + ?Sized> ResourceService for EventResourceService<C> {
|
||||
Ok(event.into())
|
||||
}
|
||||
|
||||
async fn save_file(&self, _file: Self::File) -> Result<(), Self::Error> {
|
||||
async fn save_resource(&self, _file: Self::Resource) -> Result<(), Self::Error> {
|
||||
Err(Error::NotImplemented)
|
||||
}
|
||||
|
||||
async fn delete_file(&self, use_trashbin: bool) -> Result<(), Self::Error> {
|
||||
async fn delete_resource(&self, use_trashbin: bool) -> Result<(), Self::Error> {
|
||||
self.cal_store
|
||||
.write()
|
||||
.await
|
||||
|
||||
@@ -88,7 +88,7 @@ impl Resource for PrincipalResource {
|
||||
impl<C: CalendarStore + ?Sized> ResourceService for PrincipalResourceService<C> {
|
||||
type PathComponents = (String,);
|
||||
type MemberType = CalendarResource;
|
||||
type File = PrincipalResource;
|
||||
type Resource = PrincipalResource;
|
||||
type Error = Error;
|
||||
|
||||
async fn new(
|
||||
@@ -112,7 +112,7 @@ impl<C: CalendarStore + ?Sized> ResourceService for PrincipalResourceService<C>
|
||||
})
|
||||
}
|
||||
|
||||
async fn get_file(&self) -> Result<Self::File, Self::Error> {
|
||||
async fn get_resource(&self) -> Result<Self::Resource, Self::Error> {
|
||||
Ok(PrincipalResource {
|
||||
principal: self.principal.to_owned(),
|
||||
})
|
||||
@@ -134,7 +134,7 @@ impl<C: CalendarStore + ?Sized> ResourceService for PrincipalResourceService<C>
|
||||
.collect())
|
||||
}
|
||||
|
||||
async fn save_file(&self, _file: Self::File) -> Result<(), Self::Error> {
|
||||
async fn save_resource(&self, _file: Self::Resource) -> Result<(), Self::Error> {
|
||||
Err(Error::NotImplemented)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ impl Resource for RootResource {
|
||||
impl ResourceService for RootResourceService {
|
||||
type PathComponents = ();
|
||||
type MemberType = RootResource;
|
||||
type File = RootResource;
|
||||
type Resource = RootResource;
|
||||
type Error = Error;
|
||||
|
||||
async fn new(
|
||||
@@ -77,13 +77,13 @@ impl ResourceService for RootResourceService {
|
||||
})
|
||||
}
|
||||
|
||||
async fn get_file(&self) -> Result<Self::File, Self::Error> {
|
||||
async fn get_resource(&self) -> Result<Self::Resource, Self::Error> {
|
||||
Ok(RootResource {
|
||||
principal: self.principal.to_owned(),
|
||||
})
|
||||
}
|
||||
|
||||
async fn save_file(&self, _file: Self::File) -> Result<(), Self::Error> {
|
||||
async fn save_resource(&self, _file: Self::Resource) -> Result<(), Self::Error> {
|
||||
Err(Error::NotImplemented)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ pub async fn route_delete<A: CheckAuthentication, R: ResourceService>(
|
||||
.unwrap_or(false);
|
||||
|
||||
let resource_service = R::new(&req, &auth_info, path_components.clone()).await?;
|
||||
resource_service.delete_file(!no_trash).await?;
|
||||
resource_service.delete_resource(!no_trash).await?;
|
||||
|
||||
Ok(HttpResponse::Ok().body(""))
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ pub async fn route_propfind<A: CheckAuthentication, R: ResourceService>(
|
||||
depth: Depth,
|
||||
) -> Result<
|
||||
MultistatusElement<
|
||||
PropstatWrapper<<R::File as Resource>::Prop>,
|
||||
PropstatWrapper<<R::Resource as Resource>::Prop>,
|
||||
PropstatWrapper<<R::MemberType as Resource>::Prop>,
|
||||
>,
|
||||
R::Error,
|
||||
@@ -88,7 +88,7 @@ pub async fn route_propfind<A: CheckAuthentication, R: ResourceService>(
|
||||
}
|
||||
}
|
||||
|
||||
let resource = resource_service.get_file().await?;
|
||||
let resource = resource_service.get_resource().await?;
|
||||
let response = resource.propfind(&prefix, path, props).await?;
|
||||
|
||||
Ok(MultistatusElement {
|
||||
|
||||
@@ -60,7 +60,7 @@ pub async fn route_proppatch<A: CheckAuthentication, R: ResourceService>(
|
||||
|
||||
debug!("{body}");
|
||||
|
||||
let PropertyupdateElement::<<R::File as Resource>::Prop> { operations } =
|
||||
let PropertyupdateElement::<<R::Resource as Resource>::Prop> { operations } =
|
||||
quick_xml::de::from_str(&body).map_err(Error::XmlDecodeError)?;
|
||||
|
||||
// Extract all set property names without verification
|
||||
@@ -76,7 +76,7 @@ pub async fn route_proppatch<A: CheckAuthentication, R: ResourceService>(
|
||||
})
|
||||
.collect();
|
||||
|
||||
let mut resource = resource_service.get_file().await?;
|
||||
let mut resource = resource_service.get_resource().await?;
|
||||
|
||||
let mut props_ok = Vec::new();
|
||||
let mut props_conflict = Vec::new();
|
||||
@@ -105,7 +105,7 @@ pub async fn route_proppatch<A: CheckAuthentication, R: ResourceService>(
|
||||
}
|
||||
}
|
||||
Operation::Remove(_remove_el) => {
|
||||
match <<R::File as Resource>::PropName as FromStr>::from_str(&propname) {
|
||||
match <<R::Resource as Resource>::PropName as FromStr>::from_str(&propname) {
|
||||
Ok(prop) => {
|
||||
match resource.remove_prop(prop) {
|
||||
Ok(()) => {
|
||||
@@ -131,7 +131,7 @@ pub async fn route_proppatch<A: CheckAuthentication, R: ResourceService>(
|
||||
|
||||
if props_not_found.is_empty() && props_conflict.is_empty() {
|
||||
// Only save if no errors occured
|
||||
resource_service.save_file(resource).await?;
|
||||
resource_service.save_resource(resource).await?;
|
||||
}
|
||||
|
||||
Ok(MultistatusElement {
|
||||
|
||||
@@ -42,7 +42,7 @@ pub trait InvalidProperty {
|
||||
pub trait ResourceService: Sized {
|
||||
type MemberType: Resource<Error = Self::Error>;
|
||||
type PathComponents: Sized + Clone; // defines how the resource URI maps to parameters, i.e. /{principal}/{calendar} -> (String, String)
|
||||
type File: Resource<Error = Self::Error>;
|
||||
type Resource: Resource<Error = Self::Error>;
|
||||
type Error: ResponseError + From<crate::Error> + From<anyhow::Error>;
|
||||
|
||||
async fn new(
|
||||
@@ -58,9 +58,9 @@ pub trait ResourceService: Sized {
|
||||
Ok(vec![])
|
||||
}
|
||||
|
||||
async fn get_file(&self) -> Result<Self::File, Self::Error>;
|
||||
async fn save_file(&self, file: Self::File) -> Result<(), Self::Error>;
|
||||
async fn delete_file(&self, _use_trashbin: bool) -> Result<(), Self::Error> {
|
||||
async fn get_resource(&self) -> Result<Self::Resource, Self::Error>;
|
||||
async fn save_resource(&self, file: Self::Resource) -> Result<(), Self::Error>;
|
||||
async fn delete_resource(&self, _use_trashbin: bool) -> Result<(), Self::Error> {
|
||||
Err(crate::Error::Unauthorized.into())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user