diff --git a/crates/caldav/src/calendar/methods/mkcalendar.rs b/crates/caldav/src/calendar/methods/mkcalendar.rs index 95ff9d6..c1964bc 100644 --- a/crates/caldav/src/calendar/methods/mkcalendar.rs +++ b/crates/caldav/src/calendar/methods/mkcalendar.rs @@ -46,7 +46,7 @@ pub struct PropElement { } #[derive(XmlDeserialize, XmlRootTag, Clone, Debug)] -#[xml(root = b"mkcalendar")] +#[xml(root = "mkcalendar")] #[xml(ns = "rustical_dav::namespace::NS_CALDAV")] struct MkcalendarRequest { #[xml(ns = "rustical_dav::namespace::NS_DAV")] @@ -54,7 +54,7 @@ struct MkcalendarRequest { } #[derive(XmlDeserialize, XmlRootTag, Clone, Debug)] -#[xml(root = b"mkcol")] +#[xml(root = "mkcol")] #[xml(ns = "rustical_dav::namespace::NS_DAV")] struct MkcolRequest { #[xml(ns = "rustical_dav::namespace::NS_DAV")] diff --git a/crates/caldav/src/calendar/resource.rs b/crates/caldav/src/calendar/resource.rs index 9afdbe0..c3a2f1c 100644 --- a/crates/caldav/src/calendar/resource.rs +++ b/crates/caldav/src/calendar/resource.rs @@ -225,12 +225,12 @@ impl Resource for CalendarResource { } CalendarProp::TimezoneServiceSet(_) => Err(rustical_dav::Error::PropReadOnly), CalendarProp::CalendarTimezoneId(timezone_id) => { - if let Some(tzid) = &timezone_id { - if !vtimezones_rs::VTIMEZONES.contains_key(tzid) { - return Err(rustical_dav::Error::BadRequest(format!( - "Invalid timezone-id: {tzid}" - ))); - } + if let Some(tzid) = &timezone_id + && !vtimezones_rs::VTIMEZONES.contains_key(tzid) + { + return Err(rustical_dav::Error::BadRequest(format!( + "Invalid timezone-id: {tzid}" + ))); } self.cal.timezone_id = timezone_id; Ok(()) diff --git a/crates/caldav/src/principal/prop.rs b/crates/caldav/src/principal/prop.rs index 2073cff..6777dfb 100644 --- a/crates/caldav/src/principal/prop.rs +++ b/crates/caldav/src/principal/prop.rs @@ -16,13 +16,13 @@ pub enum PrincipalProp { CalendarUserAddressSet(HrefElement), // WebDAV Access Control (RFC 3744) - #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = b"principal-URL")] + #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = "principal-URL")] PrincipalUrl(HrefElement), #[xml(ns = "rustical_dav::namespace::NS_DAV")] GroupMembership(GroupMembership), #[xml(ns = "rustical_dav::namespace::NS_DAV")] GroupMemberSet(GroupMemberSet), - #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = b"alternate-URI-set")] + #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = "alternate-URI-set")] AlternateUriSet, // #[xml(ns = "rustical_dav::namespace::NS_DAV")] // PrincipalCollectionSet(HrefElement), diff --git a/crates/carddav/src/addressbook/methods/mkcol.rs b/crates/carddav/src/addressbook/methods/mkcol.rs index 225ce0f..aa4720e 100644 --- a/crates/carddav/src/addressbook/methods/mkcol.rs +++ b/crates/carddav/src/addressbook/methods/mkcol.rs @@ -22,7 +22,7 @@ pub struct MkcolAddressbookProp { resourcetype: Option, #[xml(ns = "rustical_dav::namespace::NS_DAV")] displayname: Option, - #[xml(rename = b"addressbook-description")] + #[xml(rename = "addressbook-description")] #[xml(ns = "rustical_dav::namespace::NS_CARDDAV")] description: Option, } @@ -34,7 +34,7 @@ pub struct PropElement { } #[derive(XmlDeserialize, XmlRootTag, Clone, Debug, PartialEq)] -#[xml(root = b"mkcol")] +#[xml(root = "mkcol")] #[xml(ns = "rustical_dav::namespace::NS_DAV")] struct MkcolRequest { #[xml(ns = "rustical_dav::namespace::NS_DAV")] diff --git a/crates/carddav/src/principal/prop.rs b/crates/carddav/src/principal/prop.rs index ebe68e8..8bf79a4 100644 --- a/crates/carddav/src/principal/prop.rs +++ b/crates/carddav/src/principal/prop.rs @@ -8,14 +8,14 @@ use rustical_xml::{EnumVariants, PropName, XmlDeserialize, XmlSerialize}; #[xml(unit_variants_ident = "PrincipalPropName")] pub enum PrincipalProp { // WebDAV Access Control (RFC 3744) - #[xml(rename = b"principal-URL")] + #[xml(rename = "principal-URL")] #[xml(ns = "rustical_dav::namespace::NS_DAV")] PrincipalUrl(HrefElement), #[xml(ns = "rustical_dav::namespace::NS_DAV")] GroupMembership(GroupMembership), #[xml(ns = "rustical_dav::namespace::NS_DAV")] GroupMemberSet(GroupMemberSet), - #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = b"alternate-URI-set")] + #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = "alternate-URI-set")] AlternateUriSet, #[xml(ns = "rustical_dav::namespace::NS_DAV")] PrincipalCollectionSet(HrefElement), diff --git a/crates/dav/src/privileges.rs b/crates/dav/src/privileges.rs index b401110..beb3347 100644 --- a/crates/dav/src/privileges.rs +++ b/crates/dav/src/privileges.rs @@ -20,13 +20,13 @@ impl XmlSerialize for UserPrivilegeSet { fn serialize( &self, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { #[derive(XmlSerialize)] pub struct FakeUserPrivilegeSet { - #[xml(rename = b"privilege", flatten)] + #[xml(rename = "privilege", flatten)] privileges: Vec, } diff --git a/crates/dav/src/resource/methods/delete.rs b/crates/dav/src/resource/methods/delete.rs index 8279ab4..d7b5c47 100644 --- a/crates/dav/src/resource/methods/delete.rs +++ b/crates/dav/src/resource/methods/delete.rs @@ -60,11 +60,11 @@ pub async fn route_delete( 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) diff --git a/crates/dav/src/resource/methods/proppatch.rs b/crates/dav/src/resource/methods/proppatch.rs index 0147e1e..4ba6adf 100644 --- a/crates/dav/src/resource/methods/proppatch.rs +++ b/crates/dav/src/resource/methods/proppatch.rs @@ -57,7 +57,7 @@ enum Operation { } #[derive(XmlDeserialize, XmlRootTag, Clone, Debug)] -#[xml(root = b"propertyupdate")] +#[xml(root = "propertyupdate")] #[xml(ns = "crate::namespace::NS_DAV")] struct PropertyupdateElement(#[xml(ty = "untagged", flatten)] Vec>); diff --git a/crates/dav/src/xml/error.rs b/crates/dav/src/xml/error.rs index 8dc5afc..32d95fd 100644 --- a/crates/dav/src/xml/error.rs +++ b/crates/dav/src/xml/error.rs @@ -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", diff --git a/crates/dav/src/xml/multistatus.rs b/crates/dav/src/xml/multistatus.rs index 19c9f73..0e2cc0b 100644 --- a/crates/dav/src/xml/multistatus.rs +++ b/crates/dav/src/xml/multistatus.rs @@ -22,8 +22,8 @@ pub struct PropstatElement { fn xml_serialize_status( status: &StatusCode, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { XmlSerialize::serialize(&format!("HTTP/1.1 {}", status), ns, tag, namespaces, writer) @@ -40,7 +40,7 @@ pub enum PropstatWrapper { // #[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 { fn xml_serialize_optional_status( val: &Option, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { XmlSerialize::serialize( @@ -86,7 +86,7 @@ impl Default for ResponseElement { // // 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 Default for ResponseElement { crate::namespace::NS_DAVPUSH = "PUSH" ))] pub struct MultistatusElement { - #[xml(rename = b"response", flatten)] + #[xml(rename = "response", flatten)] pub responses: Vec>, - #[xml(rename = b"response", flatten)] + #[xml(rename = "response", flatten)] pub member_responses: Vec>, pub sync_token: Option, } diff --git a/crates/dav/src/xml/propfind.rs b/crates/dav/src/xml/propfind.rs index 587bbc3..dbee279 100644 --- a/crates/dav/src/xml/propfind.rs +++ b/crates/dav/src/xml/propfind.rs @@ -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 { #[xml(ty = "untagged")] pub prop: PropfindType, diff --git a/crates/dav/src/xml/resourcetype.rs b/crates/dav/src/xml/resourcetype.rs index e5bde00..8b9dcb5 100644 --- a/crates/dav/src/xml/resourcetype.rs +++ b/crates/dav/src/xml/resourcetype.rs @@ -16,7 +16,7 @@ mod tests { use super::{Resourcetype, ResourcetypeInner}; #[derive(XmlSerialize, XmlRootTag)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { resourcetype: Resourcetype, } diff --git a/crates/dav/src/xml/sync_collection.rs b/crates/dav/src/xml/sync_collection.rs index b742d28..50d14a8 100644 --- a/crates/dav/src/xml/sync_collection.rs +++ b/crates/dav/src/xml/sync_collection.rs @@ -60,7 +60,7 @@ pub struct NresultsElement(#[xml(ty = "text")] u64); // // // -#[xml(ns = "crate::namespace::NS_DAV", root = b"sync-collection")] +#[xml(ns = "crate::namespace::NS_DAV", root = "sync-collection")] pub struct SyncCollectionRequest { #[xml(ns = "crate::namespace::NS_DAV")] pub sync_token: String, diff --git a/crates/dav/src/xml/tag_list.rs b/crates/dav/src/xml/tag_list.rs index 0c5ca23..6aa890d 100644 --- a/crates/dav/src/xml/tag_list.rs +++ b/crates/dav/src/xml/tag_list.rs @@ -13,8 +13,8 @@ impl XmlSerialize for TagList { fn serialize( &self, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> 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()); diff --git a/crates/dav_push/src/lib.rs b/crates/dav_push/src/lib.rs index a0dd196..e27b394 100644 --- a/crates/dav_push/src/lib.rs +++ b/crates/dav_push/src/lib.rs @@ -25,7 +25,7 @@ pub struct ContentUpdate { } #[derive(XmlSerialize, XmlRootTag, Debug)] -#[xml(root = b"push-message", ns = "rustical_dav::namespace::NS_DAVPUSH")] +#[xml(root = "push-message", ns = "rustical_dav::namespace::NS_DAVPUSH")] #[xml(ns_prefix( rustical_dav::namespace::NS_DAVPUSH = "", rustical_dav::namespace::NS_DAV = "D", diff --git a/crates/dav_push/src/prop.rs b/crates/dav_push/src/prop.rs index 3ffba18..f995967 100644 --- a/crates/dav_push/src/prop.rs +++ b/crates/dav_push/src/prop.rs @@ -35,12 +35,12 @@ pub enum Trigger { #[derive(XmlSerialize, XmlDeserialize, PartialEq, Clone, Debug)] pub struct ContentUpdate( - #[xml(rename = b"depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, + #[xml(rename = "depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, ); #[derive(XmlSerialize, PartialEq, Clone, Debug)] pub struct PropertyUpdate( - #[xml(rename = b"depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, + #[xml(rename = "depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, ); impl XmlDeserialize for PropertyUpdate { @@ -51,8 +51,8 @@ impl XmlDeserialize for PropertyUpdate { ) -> Result { #[derive(XmlDeserialize, PartialEq, Clone, Debug)] struct FakePropertyUpdate( - #[xml(rename = b"depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, - #[xml(rename = b"prop", ns = "rustical_dav::namespace::NS_DAV")] pub Unparsed, + #[xml(rename = "depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, + #[xml(rename = "prop", ns = "rustical_dav::namespace::NS_DAV")] pub Unparsed, ); let FakePropertyUpdate(depth, _) = FakePropertyUpdate::deserialize(reader, start, empty)?; Ok(Self(depth)) diff --git a/crates/dav_push/src/register.rs b/crates/dav_push/src/register.rs index 5a3d05b..4a159dc 100644 --- a/crates/dav_push/src/register.rs +++ b/crates/dav_push/src/register.rs @@ -17,7 +17,7 @@ pub struct WebPushSubscription { #[derive(XmlDeserialize, Clone, Debug, PartialEq)] pub struct SubscriptionPublicKey { - #[xml(ty = "attr", rename = b"type")] + #[xml(ty = "attr", rename = "type")] pub ty: String, #[xml(ty = "text")] pub key: String, @@ -33,7 +33,7 @@ pub struct SubscriptionElement { pub struct TriggerElement(#[xml(ty = "untagged", flatten)] Vec); #[derive(XmlDeserialize, XmlRootTag, Clone, Debug, PartialEq)] -#[xml(root = b"push-register")] +#[xml(root = "push-register")] #[xml(ns = "rustical_dav::namespace::NS_DAVPUSH")] pub struct PushRegister { #[xml(ns = "rustical_dav::namespace::NS_DAVPUSH")] diff --git a/crates/xml/derive/src/attrs.rs b/crates/xml/derive/src/attrs.rs index 7695173..20ac5c6 100644 --- a/crates/xml/derive/src/attrs.rs +++ b/crates/xml/derive/src/attrs.rs @@ -1,11 +1,11 @@ use std::collections::HashMap; use darling::{FromDeriveInput, FromField, FromMeta, FromVariant, util::Flag}; -use syn::{Ident, LitByteStr, LitStr}; +use syn::{Ident, LitStr}; #[derive(Debug, Default, FromMeta, Clone)] pub struct TagAttrs { - pub rename: Option, + pub rename: Option, pub ns: Option, } @@ -30,7 +30,7 @@ pub struct EnumAttrs { #[derive(Default, FromDeriveInput, Clone)] #[darling(attributes(xml))] pub struct StructAttrs { - pub root: Option, + pub root: Option, pub ns: Option, #[darling(default)] pub ns_prefix: HashMap, diff --git a/crates/xml/derive/src/field.rs b/crates/xml/derive/src/field.rs index 39e8aa4..f73e116 100644 --- a/crates/xml/derive/src/field.rs +++ b/crates/xml/derive/src/field.rs @@ -35,7 +35,7 @@ impl Field { } /// Field name in XML - pub fn xml_name(&self) -> syn::LitByteStr { + pub fn xml_name(&self) -> syn::LitStr { if let Some(rename) = self.attrs.common.rename.to_owned() { rename } else { @@ -43,7 +43,7 @@ impl Field { .field_ident() .as_ref() .expect("unnamed tag fields need a rename attribute"); - syn::LitByteStr::new(ident.to_string().to_kebab_case().as_bytes(), ident.span()) + syn::LitStr::new(ident.to_string().to_kebab_case().as_str(), ident.span()) } } @@ -174,6 +174,8 @@ impl Field { .map(|ns| quote! { if ns == #ns }); let field_name = self.xml_name(); + let b_field_name = + syn::LitByteStr::new(self.xml_name().value().as_bytes(), field_name.span()); let builder_field_ident = self.builder_field_ident(); let deserializer = self.deserializer_type(); let value = quote! { <#deserializer as rustical_xml::XmlDeserialize>::deserialize(reader, &start, empty)? }; @@ -186,7 +188,7 @@ impl Field { }; Some(quote! { - (#namespace_match, #field_name) #namespace_condition => { #assignment; } + (#namespace_match, #b_field_name) #namespace_condition => { #assignment; } }) } @@ -231,6 +233,8 @@ impl Field { } let builder_field_ident = self.builder_field_ident(); let field_name = self.xml_name(); + let b_field_name = + syn::LitByteStr::new(self.xml_name().value().as_bytes(), field_name.span()); let value = wrap_option_if_no_default( quote! { @@ -240,7 +244,7 @@ impl Field { ); Some(quote! { - #field_name => { + #b_field_name => { builder.#builder_field_ident = #value; } }) @@ -255,7 +259,6 @@ impl Field { let value = quote! { if let ::quick_xml::name::ResolveResult::Bound(ns) = &ns { Some(ns.into()) - // Some(rustical_xml::ValueDeserialize::deserialize(&String::from_utf8_lossy(ns.0.as_ref()))?) } else { None } diff --git a/crates/xml/derive/src/generic.rs b/crates/xml/derive/src/generic.rs index 6657a0b..ebcfe38 100644 --- a/crates/xml/derive/src/generic.rs +++ b/crates/xml/derive/src/generic.rs @@ -1,16 +1,12 @@ pub(crate) fn get_generic_type(ty: &syn::Type) -> Option<&syn::Type> { - if let syn::Type::Path(syn::TypePath { path, .. }) = ty { - if let Some(seg) = path.segments.last() { - if let syn::PathArguments::AngleBracketed(syn::AngleBracketedGenericArguments { - args, - .. - }) = &seg.arguments - { - if let Some(syn::GenericArgument::Type(t)) = &args.first() { - return Some(t); - } - } - } + if let syn::Type::Path(syn::TypePath { path, .. }) = ty + && let Some(seg) = path.segments.last() + && let syn::PathArguments::AngleBracketed(syn::AngleBracketedGenericArguments { + args, .. + }) = &seg.arguments + && let Some(syn::GenericArgument::Type(t)) = &args.first() + { + return Some(t); } None } diff --git a/crates/xml/derive/src/variant.rs b/crates/xml/derive/src/variant.rs index 5d72dc0..e8ad2b3 100644 --- a/crates/xml/derive/src/variant.rs +++ b/crates/xml/derive/src/variant.rs @@ -14,13 +14,13 @@ impl Variant { &self.variant.ident } - pub fn xml_name(&self) -> syn::LitByteStr { + pub fn xml_name(&self) -> syn::LitStr { self.attrs .common .rename .to_owned() - .unwrap_or(syn::LitByteStr::new( - self.ident().to_string().to_kebab_case().as_bytes(), + .unwrap_or(syn::LitStr::new( + self.ident().to_string().to_kebab_case().as_str(), self.ident().span(), )) } @@ -75,6 +75,8 @@ impl Variant { } let ident = self.ident(); let variant_name = self.xml_name(); + let b_variant_name = + syn::LitByteStr::new(self.xml_name().value().as_bytes(), variant_name.span()); let deserializer_type = self.deserializer_type(); Some( @@ -93,7 +95,7 @@ impl Variant { panic!("tuple variants should contain exactly one element"); } quote! { - #variant_name => { + #b_variant_name => { let val = Some(<#deserializer_type as ::rustical_xml::XmlDeserialize>::deserialize(reader, start, empty)?); Ok(Self::#ident(val)) } @@ -104,7 +106,7 @@ impl Variant { panic!("tuple variants should contain exactly one element"); } quote! { - #variant_name => { + #b_variant_name => { let val = <#deserializer_type as ::rustical_xml::XmlDeserialize>::deserialize(reader, start, empty)?; Ok(Self::#ident(val)) } @@ -112,7 +114,7 @@ impl Variant { } (false, Fields::Unit, _) => { quote! { - #variant_name => { + #b_variant_name => { // Make sure that content is still consumed <() as ::rustical_xml::XmlDeserialize>::deserialize(reader, start, empty)?; Ok(Self::#ident) diff --git a/crates/xml/derive/src/xml_enum/impl_prop_name.rs b/crates/xml/derive/src/xml_enum/impl_prop_name.rs index 469b7e6..3183fa1 100644 --- a/crates/xml/derive/src/xml_enum/impl_prop_name.rs +++ b/crates/xml/derive/src/xml_enum/impl_prop_name.rs @@ -111,8 +111,7 @@ impl Enum { Some(ns) => quote! { Some(#ns) }, None => quote! { None }, }; - let b_xml_name = variant.xml_name().value(); - let xml_name = String::from_utf8_lossy(&b_xml_name); + let xml_name = variant.xml_name().value(); let out = quote! {(#ns, #xml_name)}; let ident = &variant.variant.ident; @@ -134,8 +133,7 @@ impl Enum { let str_to_unit_branches = tagged_variants.iter().map(|variant| { let ident = &variant.variant.ident; - let b_xml_name = variant.xml_name().value(); - let xml_name = String::from_utf8_lossy(&b_xml_name); + let xml_name = variant.xml_name().value(); if variant.attrs.prop.is_some() { quote! { #xml_name => Ok(Self::#ident (Default::default())) } } else { diff --git a/crates/xml/derive/src/xml_enum/impl_se.rs b/crates/xml/derive/src/xml_enum/impl_se.rs index aa3d186..f45d204 100644 --- a/crates/xml/derive/src/xml_enum/impl_se.rs +++ b/crates/xml/derive/src/xml_enum/impl_se.rs @@ -16,8 +16,8 @@ impl Enum { fn serialize( &self, ns: Option<::quick_xml::name::Namespace>, - tag: Option<&[u8]>, - namespaces: &::std::collections::HashMap<::quick_xml::name::Namespace, &[u8]>, + tag: Option<&str>, + namespaces: &::std::collections::HashMap<::quick_xml::name::Namespace, &str>, writer: &mut ::quick_xml::Writer<&mut Vec> ) -> ::std::io::Result<()> { use ::quick_xml::events::{BytesEnd, BytesStart, BytesText, Event}; @@ -25,14 +25,16 @@ impl Enum { let prefix = ns .map(|ns| namespaces.get(&ns)) .unwrap_or(None) - .map(|prefix| if !prefix.is_empty() { - [*prefix, b":"].concat() - } else { - vec![] - }); + .map(|prefix| { + if !prefix.is_empty() { + format!("{prefix}:") + } else { + 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)); + let qname = tagname.as_ref().map(|tagname| ::quick_xml::name::QName(tagname.as_bytes())); const enum_untagged: bool = #enum_untagged; diff --git a/crates/xml/derive/src/xml_enum/mod.rs b/crates/xml/derive/src/xml_enum/mod.rs index 4b55475..d444649 100644 --- a/crates/xml/derive/src/xml_enum/mod.rs +++ b/crates/xml/derive/src/xml_enum/mod.rs @@ -108,8 +108,7 @@ impl Enum { Some(ns) => quote! { Some(#ns) }, None => quote! { None }, }; - let b_xml_name = variant.xml_name().value(); - let xml_name = String::from_utf8_lossy(&b_xml_name); + let xml_name = variant.xml_name().value(); quote! {(#ns, #xml_name)} }); diff --git a/crates/xml/derive/src/xml_struct/impl_se.rs b/crates/xml/derive/src/xml_struct/impl_se.rs index bff0a65..07e019b 100644 --- a/crates/xml/derive/src/xml_struct/impl_se.rs +++ b/crates/xml/derive/src/xml_struct/impl_se.rs @@ -33,7 +33,7 @@ impl NamedStruct { let field_index = field.target_field_index(); quote! { ::quick_xml::events::attributes::Attribute { - key: ::quick_xml::name::QName(#field_name), + key: ::quick_xml::name::QName(#field_name.as_bytes()), value: ::std::borrow::Cow::from(::rustical_xml::ValueSerialize::serialize(&self.#field_index).into_bytes()) } } @@ -47,7 +47,7 @@ impl NamedStruct { let field_index = field.target_field_index(); quote! { let tag_str = self.#field_index.to_string(); - let tag = Some(tag.unwrap_or(tag_str.as_bytes())); + let tag = Some(tag.unwrap_or(tag_str.as_str())); } }); @@ -90,8 +90,8 @@ impl NamedStruct { fn serialize( &self, ns: Option<::quick_xml::name::Namespace>, - tag: Option<&[u8]>, - namespaces: &::std::collections::HashMap<::quick_xml::name::Namespace, &[u8]>, + tag: Option<&str>, + namespaces: &::std::collections::HashMap<::quick_xml::name::Namespace, &str>, writer: &mut ::quick_xml::Writer<&mut Vec> ) -> ::std::io::Result<()> { use ::quick_xml::events::{BytesEnd, BytesStart, BytesText, Event}; @@ -104,15 +104,15 @@ impl NamedStruct { .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)); - // + let qname = tagname.as_ref().map(|tagname| ::quick_xml::name::QName(tagname.as_bytes())); + if let Some(qname) = &qname { let mut bytes_start = BytesStart::from(qname.to_owned()); if !has_prefix { diff --git a/crates/xml/derive/src/xml_struct/mod.rs b/crates/xml/derive/src/xml_struct/mod.rs index f4fa309..d79ae4f 100644 --- a/crates/xml/derive/src/xml_struct/mod.rs +++ b/crates/xml/derive/src/xml_struct/mod.rs @@ -68,7 +68,7 @@ impl NamedStruct { .ns_prefix .iter() .map(|(ns, prefix)| { - quote! { (#ns, #prefix.as_ref()) } + quote! { (#ns, #prefix) } }) .collect() } else { @@ -77,9 +77,9 @@ impl NamedStruct { quote! { impl #impl_generics ::rustical_xml::XmlRootTag for #ident #type_generics #where_clause { - fn root_tag() -> &'static [u8] { #root } + fn root_tag() -> &'static str { #root } fn root_ns() -> Option<::quick_xml::name::Namespace<'static>> { #ns } - fn root_ns_prefixes() -> ::std::collections::HashMap<::quick_xml::name::Namespace<'static>, &'static [u8]> { + fn root_ns_prefixes() -> ::std::collections::HashMap<::quick_xml::name::Namespace<'static>, &'static str> { ::std::collections::HashMap::from_iter(vec![ #(#prefixes),* ]) diff --git a/crates/xml/src/de.rs b/crates/xml/src/de.rs index edcf220..458ab69 100644 --- a/crates/xml/src/de.rs +++ b/crates/xml/src/de.rs @@ -49,7 +49,7 @@ impl XmlDocument for T { let (ns, name) = reader.resolve_element(start.name()); let matches = match (Self::root_ns(), &ns, name) { // Wrong tag - (_, _, name) if name.as_ref() != Self::root_tag() => false, + (_, _, name) if name.as_ref() != Self::root_tag().as_bytes() => false, // Wrong namespace (Some(root_ns), ns, _) if &ResolveResult::Bound(root_ns) != ns => false, _ => true, @@ -60,7 +60,7 @@ impl XmlDocument for T { format!("{ns:?}"), String::from_utf8_lossy(name.as_ref()).to_string(), format!("{root_ns:?}"), - String::from_utf8_lossy(Self::root_tag()).to_string(), + Self::root_tag().to_owned(), )); }; diff --git a/crates/xml/src/lib.rs b/crates/xml/src/lib.rs index 6195fc7..b28737a 100644 --- a/crates/xml/src/lib.rs +++ b/crates/xml/src/lib.rs @@ -23,9 +23,9 @@ pub use xml_derive::PropName; pub use xml_derive::XmlRootTag; pub trait XmlRootTag { - fn root_tag() -> &'static [u8]; + fn root_tag() -> &'static str; fn root_ns() -> Option>; - fn root_ns_prefixes() -> HashMap, &'static [u8]>; + fn root_ns_prefixes() -> HashMap, &'static str>; } #[derive(Debug)] diff --git a/crates/xml/src/namespace.rs b/crates/xml/src/namespace.rs index 9cb496f..c3a97df 100644 --- a/crates/xml/src/namespace.rs +++ b/crates/xml/src/namespace.rs @@ -28,7 +28,7 @@ impl<'a> From<&'a Namespace<'a>> for NamespaceOwned { } impl NamespaceOwned { - pub fn as_ref(&self) -> Namespace { + pub fn as_ref(&self) -> Namespace<'_> { Namespace(&self.0) } } diff --git a/crates/xml/src/se.rs b/crates/xml/src/se.rs index 156e0e3..4d0365c 100644 --- a/crates/xml/src/se.rs +++ b/crates/xml/src/se.rs @@ -10,8 +10,8 @@ pub trait XmlSerialize { fn serialize( &self, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()>; @@ -22,8 +22,8 @@ impl XmlSerialize for Option { fn serialize( &self, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { if let Some(some) = self { @@ -60,8 +60,8 @@ impl XmlSerialize for () { fn serialize( &self, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { let prefix = ns @@ -69,14 +69,14 @@ impl XmlSerialize for () { .unwrap_or(None) .map(|prefix| { if !prefix.is_empty() { - [*prefix, b":"].concat() + [*prefix, ":"].concat() } 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| QName(tagname)); + let qname = tagname.as_ref().map(|tagname| QName(tagname.as_bytes())); if let Some(qname) = &qname { let mut bytes_start = BytesStart::from(qname.to_owned()); if !has_prefix && let Some(ns) = &ns { diff --git a/crates/xml/src/value.rs b/crates/xml/src/value.rs index 5914eff..2735f60 100644 --- a/crates/xml/src/value.rs +++ b/crates/xml/src/value.rs @@ -107,8 +107,8 @@ impl XmlSerialize for T { fn serialize( &self, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { let prefix = ns @@ -116,20 +116,18 @@ impl XmlSerialize for T { .unwrap_or(None) .map(|prefix| { if !prefix.is_empty() { - [*prefix, b":"].concat() + [*prefix, ":"].concat() } 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| QName(tagname)); + let qname = tagname.as_ref().map(|tagname| QName(tagname.as_bytes())); if let Some(qname) = &qname { let mut bytes_start = BytesStart::from(qname.to_owned()); - if !has_prefix { - if let Some(ns) = &ns { - bytes_start.push_attribute((b"xmlns".as_ref(), ns.as_ref())); - } + if !has_prefix && let Some(ns) = &ns { + bytes_start.push_attribute((b"xmlns".as_ref(), ns.as_ref())); } writer.write_event(Event::Start(bytes_start))?; } diff --git a/crates/xml/tests/de_enum.rs b/crates/xml/tests/de_enum.rs index 319b777..0bc66e4 100644 --- a/crates/xml/tests/de_enum.rs +++ b/crates/xml/tests/de_enum.rs @@ -1,9 +1,9 @@ -use rustical_xml::{de::XmlDocument, XmlDeserialize, XmlRootTag}; +use rustical_xml::{XmlDeserialize, XmlRootTag, de::XmlDocument}; #[test] fn test_struct_tagged_enum() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"propfind")] + #[xml(root = "propfind")] struct Propfind { prop: Prop, } @@ -58,7 +58,7 @@ fn test_struct_tagged_enum() { #[test] fn test_tagged_enum_complex() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"propfind")] + #[xml(root = "propfind")] struct Propfind { prop: PropStruct, } @@ -116,7 +116,7 @@ fn test_enum_document() { #[test] fn test_untagged_enum() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { prop: PropElement, } diff --git a/crates/xml/tests/de_struct.rs b/crates/xml/tests/de_struct.rs index 410fd01..70c1450 100644 --- a/crates/xml/tests/de_struct.rs +++ b/crates/xml/tests/de_struct.rs @@ -6,7 +6,7 @@ use std::collections::HashSet; #[test] fn test_struct_text_field() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(ty = "text")] text: String, @@ -27,7 +27,7 @@ fn test_struct_text_field() { #[test] fn test_struct_document() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { child: Child, } @@ -52,9 +52,9 @@ fn test_struct_document() { #[test] fn test_struct_rename_field() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { - #[xml(rename = b"ok-wow")] + #[xml(rename = "ok-wow")] child: Child, } @@ -78,7 +78,7 @@ fn test_struct_rename_field() { #[test] fn test_struct_optional_field() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { child: Option, } @@ -96,9 +96,9 @@ fn test_struct_optional_field() { #[test] fn test_struct_vec() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { - #[xml(rename = b"child", flatten)] + #[xml(rename = "child", flatten)] children: Vec, } @@ -124,9 +124,9 @@ fn test_struct_vec() { #[test] fn test_struct_set() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { - #[xml(rename = b"child", flatten)] + #[xml(rename = "child", flatten)] children: HashSet, } @@ -154,7 +154,7 @@ fn test_struct_ns() { const NS_HELLO: Namespace = Namespace(b"hello"); #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(ns = "NS_HELLO")] child: (), @@ -169,7 +169,7 @@ fn test_struct_attr() { const NS_HELLO: Namespace = Namespace(b"hello"); #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(ns = "NS_HELLO")] child: (), @@ -196,7 +196,7 @@ fn test_struct_attr() { #[test] fn test_struct_generics() { #[derive(XmlDeserialize, XmlRootTag)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[allow(dead_code)] child: T, @@ -217,7 +217,7 @@ fn test_struct_generics() { #[test] fn test_struct_unparsed() { #[derive(XmlDeserialize, XmlRootTag)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[allow(dead_code)] child: Unparsed, @@ -238,7 +238,7 @@ fn test_struct_unparsed() { #[test] fn test_xml_values() { #[derive(XmlDeserialize, XmlRootTag, PartialEq, Debug)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { href: String, } @@ -262,7 +262,7 @@ fn test_xml_values() { #[test] fn test_xml_cdata() { #[derive(XmlDeserialize, XmlRootTag, PartialEq, Debug)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(ty = "text")] hello: String, @@ -293,7 +293,7 @@ fn test_xml_cdata() { #[test] fn test_struct_xml_decl() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { child: Child, } @@ -323,7 +323,7 @@ fn test_struct_xml_decl() { #[test] fn test_struct_tuple() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { child: Child, } @@ -348,7 +348,7 @@ fn test_struct_tuple() { #[test] fn test_struct_untagged_ns() { #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(ty = "untagged")] child: Child, diff --git a/crates/xml/tests/enum_variants.rs b/crates/xml/tests/enum_variants.rs index 41356e6..f322e10 100644 --- a/crates/xml/tests/enum_variants.rs +++ b/crates/xml/tests/enum_variants.rs @@ -29,7 +29,7 @@ enum CalendarProp { #[allow(dead_code)] Getcontenttype(&'static str), - #[xml(ns = "NS_DAV", rename = b"principal-URL")] + #[xml(ns = "NS_DAV", rename = "principal-URL")] #[allow(dead_code)] PrincipalUrl, #[allow(dead_code)] diff --git a/crates/xml/tests/propertyupdate.rs b/crates/xml/tests/propertyupdate.rs index 0dac1c7..2c1a0ac 100644 --- a/crates/xml/tests/propertyupdate.rs +++ b/crates/xml/tests/propertyupdate.rs @@ -36,7 +36,7 @@ fn test_propertyupdate() { } #[derive(XmlDeserialize, XmlRootTag)] - #[xml(root = b"propertyupdate")] + #[xml(root = "propertyupdate")] struct PropertyupdateElement { #[xml(ty = "untagged", flatten)] #[allow(dead_code)] diff --git a/crates/xml/tests/se_enum.rs b/crates/xml/tests/se_enum.rs index 639b73d..23e25c0 100644 --- a/crates/xml/tests/se_enum.rs +++ b/crates/xml/tests/se_enum.rs @@ -3,7 +3,7 @@ use rustical_xml::{XmlRootTag, XmlSerialize, XmlSerializeRoot}; #[test] fn test_struct_value_tagged() { #[derive(Debug, XmlRootTag, XmlSerialize, PartialEq)] - #[xml(root = b"propfind")] + #[xml(root = "propfind")] struct Document { prop: Prop, } diff --git a/crates/xml/tests/se_struct.rs b/crates/xml/tests/se_struct.rs index dd7f75a..160b277 100644 --- a/crates/xml/tests/se_struct.rs +++ b/crates/xml/tests/se_struct.rs @@ -7,7 +7,7 @@ use xml_derive::XmlDeserialize; #[test] fn test_struct_document() { #[derive(Debug, XmlRootTag, XmlSerialize, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { child: Child, } @@ -30,7 +30,7 @@ fn test_struct_document() { #[test] fn test_struct_untagged_attr() { #[derive(Debug, XmlRootTag, XmlSerialize, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(ty = "attr")] name: String, @@ -57,7 +57,7 @@ fn test_struct_untagged_attr() { #[test] fn test_struct_value_tagged() { #[derive(Debug, XmlRootTag, XmlSerialize, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { href: String, num: usize, @@ -82,7 +82,7 @@ fn test_struct_value_tagged() { #[test] fn test_struct_value_untagged() { #[derive(Debug, XmlRootTag, XmlSerialize, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(ty = "untagged")] href: String, @@ -103,7 +103,7 @@ fn test_struct_value_untagged() { #[test] fn test_struct_vec() { #[derive(Debug, XmlRootTag, XmlSerialize, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(flatten)] href: Vec, @@ -127,7 +127,7 @@ fn test_struct_vec() { #[test] fn test_struct_serialize_with() { #[derive(Debug, XmlRootTag, XmlSerialize, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(serialize_with = "serialize_href")] href: String, @@ -136,8 +136,8 @@ fn test_struct_serialize_with() { fn serialize_href( val: &str, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut Writer<&mut Vec>, ) -> std::io::Result<()> { val.to_uppercase().serialize(ns, tag, namespaces, writer) @@ -160,7 +160,7 @@ fn test_struct_serialize_with() { #[test] fn test_struct_tag_list() { #[derive(Debug, XmlRootTag, XmlSerialize, XmlDeserialize, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { #[xml(ty = "untagged", flatten)] tags: Vec, @@ -194,9 +194,9 @@ fn test_struct_ns() { const NS: Namespace = quick_xml::name::Namespace(b"NS:TEST:"); #[derive(Debug, XmlRootTag, XmlSerialize)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { - #[xml(ns = "NS", rename = b"okay")] + #[xml(ns = "NS", rename = "okay")] child: String, } @@ -210,7 +210,7 @@ fn test_struct_ns() { #[test] fn test_struct_tuple() { #[derive(Debug, XmlRootTag, XmlSerialize, PartialEq)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { child: Child, } @@ -230,8 +230,8 @@ fn test_tuple_struct() { const NS: Namespace = quick_xml::name::Namespace(b"NS:TEST:"); #[derive(Debug, XmlRootTag, XmlSerialize)] - #[xml(root = b"document")] - struct Document(#[xml(ns = "NS", rename = b"okay")] String); + #[xml(root = "document")] + struct Document(#[xml(ns = "NS", rename = "okay")] String); Document("hello!".to_string()) .serialize_to_string()