mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-14 08:12:24 +00:00
xml: Comprehensive refactoring from byte strings to strings
This commit is contained in:
@@ -20,13 +20,13 @@ impl XmlSerialize for UserPrivilegeSet {
|
||||
fn serialize(
|
||||
&self,
|
||||
ns: Option<Namespace>,
|
||||
tag: Option<&[u8]>,
|
||||
namespaces: &HashMap<Namespace, &[u8]>,
|
||||
tag: Option<&str>,
|
||||
namespaces: &HashMap<Namespace, &str>,
|
||||
writer: &mut quick_xml::Writer<&mut Vec<u8>>,
|
||||
) -> std::io::Result<()> {
|
||||
#[derive(XmlSerialize)]
|
||||
pub struct FakeUserPrivilegeSet {
|
||||
#[xml(rename = b"privilege", flatten)]
|
||||
#[xml(rename = "privilege", flatten)]
|
||||
privileges: Vec<UserPrivilege>,
|
||||
}
|
||||
|
||||
|
||||
@@ -60,11 +60,11 @@ pub async fn route_delete<R: ResourceService>(
|
||||
return Err(crate::Error::PreconditionFailed.into());
|
||||
}
|
||||
}
|
||||
if let Some(if_none_match) = if_none_match {
|
||||
if resource.satisfies_if_none_match(&if_none_match) {
|
||||
// Precondition failed
|
||||
return Err(crate::Error::PreconditionFailed.into());
|
||||
}
|
||||
if let Some(if_none_match) = if_none_match
|
||||
&& resource.satisfies_if_none_match(&if_none_match)
|
||||
{
|
||||
// Precondition failed
|
||||
return Err(crate::Error::PreconditionFailed.into());
|
||||
}
|
||||
resource_service
|
||||
.delete_resource(path_components, !no_trash)
|
||||
|
||||
@@ -57,7 +57,7 @@ enum Operation<T: XmlDeserialize> {
|
||||
}
|
||||
|
||||
#[derive(XmlDeserialize, XmlRootTag, Clone, Debug)]
|
||||
#[xml(root = b"propertyupdate")]
|
||||
#[xml(root = "propertyupdate")]
|
||||
#[xml(ns = "crate::namespace::NS_DAV")]
|
||||
struct PropertyupdateElement<T: XmlDeserialize>(#[xml(ty = "untagged", flatten)] Vec<Operation<T>>);
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use rustical_xml::{XmlRootTag, XmlSerialize};
|
||||
|
||||
#[derive(XmlSerialize, XmlRootTag)]
|
||||
#[xml(ns = "crate::namespace::NS_DAV", root = b"error")]
|
||||
#[xml(ns = "crate::namespace::NS_DAV", root = "error")]
|
||||
#[xml(ns_prefix(
|
||||
crate::namespace::NS_DAV = "",
|
||||
crate::namespace::NS_CARDDAV = "CARD",
|
||||
|
||||
@@ -22,8 +22,8 @@ pub struct PropstatElement<PropType: XmlSerialize> {
|
||||
fn xml_serialize_status(
|
||||
status: &StatusCode,
|
||||
ns: Option<Namespace>,
|
||||
tag: Option<&[u8]>,
|
||||
namespaces: &HashMap<Namespace, &[u8]>,
|
||||
tag: Option<&str>,
|
||||
namespaces: &HashMap<Namespace, &str>,
|
||||
writer: &mut quick_xml::Writer<&mut Vec<u8>>,
|
||||
) -> std::io::Result<()> {
|
||||
XmlSerialize::serialize(&format!("HTTP/1.1 {}", status), ns, tag, namespaces, writer)
|
||||
@@ -40,7 +40,7 @@ pub enum PropstatWrapper<T: XmlSerialize> {
|
||||
// <!ELEMENT response (href, ((href*, status)|(propstat+)),
|
||||
// responsedescription?) >
|
||||
#[derive(XmlSerialize, XmlRootTag)]
|
||||
#[xml(ns = "crate::namespace::NS_DAV", root = b"response")]
|
||||
#[xml(ns = "crate::namespace::NS_DAV", root = "response")]
|
||||
#[xml(ns_prefix(
|
||||
crate::namespace::NS_DAV = "",
|
||||
crate::namespace::NS_CARDDAV = "CARD",
|
||||
@@ -59,8 +59,8 @@ pub struct ResponseElement<PropstatType: XmlSerialize> {
|
||||
fn xml_serialize_optional_status(
|
||||
val: &Option<StatusCode>,
|
||||
ns: Option<Namespace>,
|
||||
tag: Option<&[u8]>,
|
||||
namespaces: &HashMap<Namespace, &[u8]>,
|
||||
tag: Option<&str>,
|
||||
namespaces: &HashMap<Namespace, &str>,
|
||||
writer: &mut quick_xml::Writer<&mut Vec<u8>>,
|
||||
) -> std::io::Result<()> {
|
||||
XmlSerialize::serialize(
|
||||
@@ -86,7 +86,7 @@ impl<PT: XmlSerialize> Default for ResponseElement<PT> {
|
||||
// <!ELEMENT multistatus (response+, responsedescription?) >
|
||||
// Extended by sync-token as specified in RFC 6578
|
||||
#[derive(XmlSerialize, XmlRootTag)]
|
||||
#[xml(root = b"multistatus", ns = "crate::namespace::NS_DAV")]
|
||||
#[xml(root = "multistatus", ns = "crate::namespace::NS_DAV")]
|
||||
#[xml(ns_prefix(
|
||||
crate::namespace::NS_DAV = "",
|
||||
crate::namespace::NS_CARDDAV = "CARD",
|
||||
@@ -95,9 +95,9 @@ impl<PT: XmlSerialize> Default for ResponseElement<PT> {
|
||||
crate::namespace::NS_DAVPUSH = "PUSH"
|
||||
))]
|
||||
pub struct MultistatusElement<PropType: XmlSerialize, MemberPropType: XmlSerialize> {
|
||||
#[xml(rename = b"response", flatten)]
|
||||
#[xml(rename = "response", flatten)]
|
||||
pub responses: Vec<ResponseElement<PropType>>,
|
||||
#[xml(rename = b"response", flatten)]
|
||||
#[xml(rename = "response", flatten)]
|
||||
pub member_responses: Vec<ResponseElement<MemberPropType>>,
|
||||
pub sync_token: Option<String>,
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ use rustical_xml::XmlError;
|
||||
use rustical_xml::XmlRootTag;
|
||||
|
||||
#[derive(Debug, Clone, XmlDeserialize, XmlRootTag, PartialEq)]
|
||||
#[xml(root = b"propfind", ns = "crate::namespace::NS_DAV")]
|
||||
#[xml(root = "propfind", ns = "crate::namespace::NS_DAV")]
|
||||
pub struct PropfindElement<PN: XmlDeserialize> {
|
||||
#[xml(ty = "untagged")]
|
||||
pub prop: PropfindType<PN>,
|
||||
|
||||
@@ -16,7 +16,7 @@ mod tests {
|
||||
use super::{Resourcetype, ResourcetypeInner};
|
||||
|
||||
#[derive(XmlSerialize, XmlRootTag)]
|
||||
#[xml(root = b"document")]
|
||||
#[xml(root = "document")]
|
||||
struct Document {
|
||||
resourcetype: Resourcetype,
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ pub struct NresultsElement(#[xml(ty = "text")] u64);
|
||||
// <!ELEMENT sync-collection (sync-token, sync-level, limit?, prop)>
|
||||
// <!-- DAV:limit defined in RFC 5323, Section 5.17 -->
|
||||
// <!-- DAV:prop defined in RFC 4918, Section 14.18 -->
|
||||
#[xml(ns = "crate::namespace::NS_DAV", root = b"sync-collection")]
|
||||
#[xml(ns = "crate::namespace::NS_DAV", root = "sync-collection")]
|
||||
pub struct SyncCollectionRequest<PN: XmlDeserialize> {
|
||||
#[xml(ns = "crate::namespace::NS_DAV")]
|
||||
pub sync_token: String,
|
||||
|
||||
@@ -13,8 +13,8 @@ impl XmlSerialize for TagList {
|
||||
fn serialize(
|
||||
&self,
|
||||
ns: Option<Namespace>,
|
||||
tag: Option<&[u8]>,
|
||||
namespaces: &HashMap<Namespace, &[u8]>,
|
||||
tag: Option<&str>,
|
||||
namespaces: &HashMap<Namespace, &str>,
|
||||
writer: &mut quick_xml::Writer<&mut Vec<u8>>,
|
||||
) -> std::io::Result<()> {
|
||||
let prefix = ns
|
||||
@@ -22,16 +22,16 @@ impl XmlSerialize for TagList {
|
||||
.unwrap_or(None)
|
||||
.map(|prefix| {
|
||||
if !prefix.is_empty() {
|
||||
[*prefix, b":"].concat()
|
||||
format!("{prefix}:")
|
||||
} else {
|
||||
Vec::new()
|
||||
String::new()
|
||||
}
|
||||
});
|
||||
let has_prefix = prefix.is_some();
|
||||
let tagname = tag.map(|tag| [&prefix.unwrap_or_default(), tag].concat());
|
||||
let qname = tagname
|
||||
.as_ref()
|
||||
.map(|tagname| ::quick_xml::name::QName(tagname));
|
||||
.map(|tagname| ::quick_xml::name::QName(tagname.as_bytes()));
|
||||
|
||||
if let Some(qname) = &qname {
|
||||
let mut bytes_start = BytesStart::from(qname.to_owned());
|
||||
|
||||
Reference in New Issue
Block a user