mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 18:12:27 +00:00
rustical_dav: Move propfind parsing to resource type
This commit is contained in:
@@ -58,24 +58,8 @@ pub(crate) async fn route_propfind<R: ResourceService>(
|
||||
}
|
||||
|
||||
// A request body is optional. If empty we MUST return all props
|
||||
let propfind_self: PropfindElement<<<R::Resource as Resource>::Prop as PropName>::Names> =
|
||||
if !body.is_empty() {
|
||||
PropfindElement::parse_str(body).map_err(Error::XmlError)?
|
||||
} else {
|
||||
PropfindElement {
|
||||
prop: PropfindType::Allprop,
|
||||
include: None,
|
||||
}
|
||||
};
|
||||
let propfind_member: PropfindElement<<<R::MemberType as Resource>::Prop as PropName>::Names> =
|
||||
if !body.is_empty() {
|
||||
PropfindElement::parse_str(body).map_err(Error::XmlError)?
|
||||
} else {
|
||||
PropfindElement {
|
||||
prop: PropfindType::Allprop,
|
||||
include: None,
|
||||
}
|
||||
};
|
||||
let propfind_self = R::Resource::parse_propfind(body).map_err(Error::XmlError)?;
|
||||
let propfind_member = R::MemberType::parse_propfind(body).map_err(Error::XmlError)?;
|
||||
|
||||
let mut member_responses = Vec::new();
|
||||
if depth != &Depth::Zero {
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
use crate::Principal;
|
||||
use crate::privileges::UserPrivilegeSet;
|
||||
use crate::xml::multistatus::{PropTagWrapper, PropstatElement, PropstatWrapper};
|
||||
use crate::xml::{PropElement, PropfindType, Resourcetype};
|
||||
use crate::xml::{PropElement, PropfindElement, PropfindType, Resourcetype};
|
||||
use crate::xml::{TagList, multistatus::ResponseElement};
|
||||
use headers::{ETag, IfMatch, IfNoneMatch};
|
||||
use http::StatusCode;
|
||||
use itertools::Itertools;
|
||||
use quick_xml::name::Namespace;
|
||||
pub use resource_service::ResourceService;
|
||||
use rustical_xml::{EnumVariants, NamespaceOwned, PropName, XmlDeserialize, XmlSerialize};
|
||||
use rustical_xml::{
|
||||
EnumVariants, NamespaceOwned, PropName, XmlDeserialize, XmlDocument, XmlSerialize,
|
||||
};
|
||||
use std::collections::HashSet;
|
||||
use std::str::FromStr;
|
||||
|
||||
@@ -102,6 +104,19 @@ pub trait Resource: Clone + Send + 'static {
|
||||
principal: &Self::Principal,
|
||||
) -> Result<UserPrivilegeSet, Self::Error>;
|
||||
|
||||
fn parse_propfind(
|
||||
body: &str,
|
||||
) -> Result<PropfindElement<<Self::Prop as PropName>::Names>, rustical_xml::XmlError> {
|
||||
if !body.is_empty() {
|
||||
PropfindElement::parse_str(body)
|
||||
} else {
|
||||
Ok(PropfindElement {
|
||||
prop: PropfindType::Allprop,
|
||||
include: None,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn propfind(
|
||||
&self,
|
||||
path: &str,
|
||||
|
||||
Reference in New Issue
Block a user