diff --git a/crates/dav/src/resource/methods/proppatch.rs b/crates/dav/src/resource/methods/proppatch.rs index 48ef887..77cf9b4 100644 --- a/crates/dav/src/resource/methods/proppatch.rs +++ b/crates/dav/src/resource/methods/proppatch.rs @@ -33,6 +33,7 @@ struct SetPropertyPropWrapperWrapper { // We are #[derive(XmlDeserialize, Clone, Debug)] struct SetPropertyElement { + #[xml(ns = "crate::namespace::NS_DAV")] prop: T, } @@ -50,17 +51,21 @@ struct PropertyElement { #[derive(XmlDeserialize, Clone, Debug)] struct RemovePropertyElement { + #[xml(ns = "crate::namespace::NS_DAV")] prop: PropertyElement, } #[derive(XmlDeserialize, Clone, Debug)] enum Operation { + #[xml(ns = "crate::namespace::NS_DAV")] Set(SetPropertyElement), + #[xml(ns = "crate::namespace::NS_DAV")] Remove(RemovePropertyElement), } #[derive(XmlDeserialize, XmlRootTag, Clone, Debug)] #[xml(root = b"propertyupdate")] +#[xml(ns = "crate::namespace::NS_DAV")] struct PropertyupdateElement { #[xml(ty = "untagged", flatten)] operations: Vec>, diff --git a/crates/dav/src/xml/multistatus.rs b/crates/dav/src/xml/multistatus.rs index 9e5050a..dfbf673 100644 --- a/crates/dav/src/xml/multistatus.rs +++ b/crates/dav/src/xml/multistatus.rs @@ -88,7 +88,7 @@ impl Default for ResponseElement { #[derive(XmlSerialize, XmlRootTag)] #[xml(root = b"multistatus", ns = "crate::namespace::NS_DAV")] #[xml(ns_prefix( - crate::namespace::NS_DAV = b"D", + crate::namespace::NS_DAV = b"", crate::namespace::NS_CARDDAV = b"CARD", crate::namespace::NS_CALDAV = b"CAL", crate::namespace::NS_CALENDARSERVER = b"CS" diff --git a/crates/xml/derive/src/xml_struct.rs b/crates/xml/derive/src/xml_struct.rs index a810040..dda345b 100644 --- a/crates/xml/derive/src/xml_struct.rs +++ b/crates/xml/derive/src/xml_struct.rs @@ -248,7 +248,12 @@ impl NamedStruct { .ns_prefix .iter() .map(|(ns, prefix)| { - let attr_name = [b"xmlns:".as_ref(), &prefix.value()].concat(); + let sep = if !prefix.value().is_empty() { + b":".to_vec() + } else { + b"".to_vec() + }; + let attr_name = [b"xmlns".as_ref(), &sep, &prefix.value()].concat(); let a = syn::LitByteStr::new(&attr_name, prefix.span()); quote! { bytes_start.push_attribute((#a.as_ref(), #ns.as_ref())); @@ -275,7 +280,13 @@ impl NamedStruct { let prefix = ns .map(|ns| namespaces.get(&ns)) .unwrap_or(None) - .map(|prefix| [*prefix, b":"].concat()); + .map(|prefix| { + if !prefix.is_empty() { + [*prefix, b":"].concat() + } else { + Vec::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)); diff --git a/crates/xml/src/lib.rs b/crates/xml/src/lib.rs index 30484a2..c710d0f 100644 --- a/crates/xml/src/lib.rs +++ b/crates/xml/src/lib.rs @@ -47,7 +47,13 @@ impl XmlSerialize for () { let prefix = ns .map(|ns| namespaces.get(&ns)) .unwrap_or(None) - .map(|prefix| [*prefix, b":"].concat()); + .map(|prefix| { + if !prefix.is_empty() { + [*prefix, b":"].concat() + } else { + Vec::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| QName(tagname)); diff --git a/crates/xml/src/value.rs b/crates/xml/src/value.rs index 6f9f80a..6912de9 100644 --- a/crates/xml/src/value.rs +++ b/crates/xml/src/value.rs @@ -103,7 +103,13 @@ impl XmlSerialize for T { let prefix = ns .map(|ns| namespaces.get(&ns)) .unwrap_or(None) - .map(|prefix| [*prefix, b":"].concat()); + .map(|prefix| { + if !prefix.is_empty() { + [*prefix, b":"].concat() + } else { + Vec::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| QName(tagname));