From d8e4bd1cc46ac91b5dcb00911ecca2781a41fe49 Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Wed, 2 Jul 2025 19:02:25 +0200 Subject: [PATCH] xml: Remove generics from XmlSerialize --- crates/caldav/src/error.rs | 2 +- crates/dav/src/privileges.rs | 4 ++-- crates/dav/src/xml/multistatus.rs | 8 +++---- crates/dav/src/xml/tag_list.rs | 4 ++-- crates/xml/derive/src/xml_enum/impl_se.rs | 4 ++-- crates/xml/derive/src/xml_struct/impl_se.rs | 4 ++-- crates/xml/src/se.rs | 24 ++++++++------------- crates/xml/src/value.rs | 4 ++-- crates/xml/tests/se_struct.rs | 4 ++-- 9 files changed, 26 insertions(+), 32 deletions(-) diff --git a/crates/caldav/src/error.rs b/crates/caldav/src/error.rs index 750f91a..8dd3d90 100644 --- a/crates/caldav/src/error.rs +++ b/crates/caldav/src/error.rs @@ -17,7 +17,7 @@ pub enum Precondition { impl IntoResponse for Precondition { fn into_response(self) -> axum::response::Response { let mut output: Vec<_> = b"\n".into(); - let mut writer = quick_xml::Writer::new_with_indent(&mut output, b' ', 4); + let mut writer = quick_xml::Writer::new_with_indent(output.as_mut_slice(), b' ', 4); let error = rustical_dav::xml::ErrorElement(&self); if let Err(err) = error.serialize_root(&mut writer) { diff --git a/crates/dav/src/privileges.rs b/crates/dav/src/privileges.rs index 3de7679..9253cd8 100644 --- a/crates/dav/src/privileges.rs +++ b/crates/dav/src/privileges.rs @@ -16,12 +16,12 @@ pub enum UserPrivilege { } impl XmlSerialize for UserPrivilegeSet { - fn serialize( + fn serialize( &self, ns: Option, tag: Option<&[u8]>, namespaces: &HashMap, - writer: &mut quick_xml::Writer, + writer: &mut quick_xml::Writer<&mut [u8]>, ) -> std::io::Result<()> { #[derive(XmlSerialize)] pub struct FakeUserPrivilegeSet { diff --git a/crates/dav/src/xml/multistatus.rs b/crates/dav/src/xml/multistatus.rs index 82ee050..9c7cb75 100644 --- a/crates/dav/src/xml/multistatus.rs +++ b/crates/dav/src/xml/multistatus.rs @@ -19,12 +19,12 @@ pub struct PropstatElement { pub status: StatusCode, } -fn xml_serialize_status( +fn xml_serialize_status( status: &StatusCode, ns: Option, tag: Option<&[u8]>, namespaces: &HashMap, - writer: &mut quick_xml::Writer, + writer: &mut quick_xml::Writer<&mut [u8]>, ) -> std::io::Result<()> { XmlSerialize::serialize(&format!("HTTP/1.1 {}", status), ns, tag, namespaces, writer) } @@ -49,12 +49,12 @@ pub struct ResponseElement { pub propstat: Vec>, } -fn xml_serialize_optional_status( +fn xml_serialize_optional_status( val: &Option, ns: Option, tag: Option<&[u8]>, namespaces: &HashMap, - writer: &mut quick_xml::Writer, + writer: &mut quick_xml::Writer<&mut [u8]>, ) -> std::io::Result<()> { XmlSerialize::serialize( &val.map(|status| format!("HTTP/1.1 {}", status)), diff --git a/crates/dav/src/xml/tag_list.rs b/crates/dav/src/xml/tag_list.rs index d180ccc..3010bb4 100644 --- a/crates/dav/src/xml/tag_list.rs +++ b/crates/dav/src/xml/tag_list.rs @@ -10,12 +10,12 @@ use std::collections::HashMap; pub struct TagList(Vec<(Option, String)>); impl XmlSerialize for TagList { - fn serialize( + fn serialize( &self, ns: Option, tag: Option<&[u8]>, namespaces: &HashMap, - writer: &mut quick_xml::Writer, + writer: &mut quick_xml::Writer<&mut [u8]>, ) -> std::io::Result<()> { let prefix = ns .map(|ns| namespaces.get(&ns)) diff --git a/crates/xml/derive/src/xml_enum/impl_se.rs b/crates/xml/derive/src/xml_enum/impl_se.rs index 59a8dba..c198fba 100644 --- a/crates/xml/derive/src/xml_enum/impl_se.rs +++ b/crates/xml/derive/src/xml_enum/impl_se.rs @@ -13,12 +13,12 @@ impl Enum { quote! { impl #impl_generics ::rustical_xml::XmlSerialize for #ident #type_generics #where_clause { - fn serialize( + fn serialize( &self, ns: Option<::quick_xml::name::Namespace>, tag: Option<&[u8]>, namespaces: &::std::collections::HashMap<::quick_xml::name::Namespace, &[u8]>, - writer: &mut ::quick_xml::Writer + writer: &mut ::quick_xml::Writer<&mut [u8]> ) -> ::std::io::Result<()> { use ::quick_xml::events::{BytesEnd, BytesStart, BytesText, Event}; diff --git a/crates/xml/derive/src/xml_struct/impl_se.rs b/crates/xml/derive/src/xml_struct/impl_se.rs index e1a6b03..2b833eb 100644 --- a/crates/xml/derive/src/xml_struct/impl_se.rs +++ b/crates/xml/derive/src/xml_struct/impl_se.rs @@ -88,12 +88,12 @@ impl NamedStruct { quote! { impl #impl_generics ::rustical_xml::XmlSerialize for #ident #type_generics #where_clause { - fn serialize( + fn serialize( &self, ns: Option<::quick_xml::name::Namespace>, tag: Option<&[u8]>, namespaces: &::std::collections::HashMap<::quick_xml::name::Namespace, &[u8]>, - writer: &mut ::quick_xml::Writer + writer: &mut ::quick_xml::Writer<&mut [u8]> ) -> ::std::io::Result<()> { use ::quick_xml::events::{BytesEnd, BytesStart, BytesText, Event}; diff --git a/crates/xml/src/se.rs b/crates/xml/src/se.rs index b8bea7c..f8142c8 100644 --- a/crates/xml/src/se.rs +++ b/crates/xml/src/se.rs @@ -7,24 +7,24 @@ use std::collections::HashMap; pub use xml_derive::XmlSerialize; pub trait XmlSerialize { - fn serialize( + fn serialize( &self, ns: Option, tag: Option<&[u8]>, namespaces: &HashMap, - writer: &mut quick_xml::Writer, + writer: &mut quick_xml::Writer<&mut [u8]>, ) -> std::io::Result<()>; fn attributes<'a>(&self) -> Option>>; } impl XmlSerialize for Option { - fn serialize( + fn serialize( &self, ns: Option, tag: Option<&[u8]>, namespaces: &HashMap, - writer: &mut quick_xml::Writer, + writer: &mut quick_xml::Writer<&mut [u8]>, ) -> std::io::Result<()> { if let Some(some) = self { some.serialize(ns, tag, namespaces, writer) @@ -39,36 +39,30 @@ impl XmlSerialize for Option { } pub trait XmlSerializeRoot { - fn serialize_root( - &self, - writer: &mut quick_xml::Writer, - ) -> std::io::Result<()>; + fn serialize_root(&self, writer: &mut quick_xml::Writer<&mut [u8]>) -> std::io::Result<()>; fn serialize_to_string(&self) -> std::io::Result { let mut buf: Vec<_> = b"\n".into(); - let mut writer = quick_xml::Writer::new(&mut buf); + let mut writer = quick_xml::Writer::new(buf.as_mut_slice()); self.serialize_root(&mut writer)?; Ok(String::from_utf8_lossy(&buf).to_string()) } } impl XmlSerializeRoot for T { - fn serialize_root( - &self, - writer: &mut quick_xml::Writer, - ) -> std::io::Result<()> { + fn serialize_root(&self, writer: &mut quick_xml::Writer<&mut [u8]>) -> std::io::Result<()> { let namespaces = Self::root_ns_prefixes(); self.serialize(Self::root_ns(), Some(Self::root_tag()), &namespaces, writer) } } impl XmlSerialize for () { - fn serialize( + fn serialize( &self, ns: Option, tag: Option<&[u8]>, namespaces: &HashMap, - writer: &mut quick_xml::Writer, + writer: &mut quick_xml::Writer<&mut [u8]>, ) -> std::io::Result<()> { let prefix = ns .map(|ns| namespaces.get(&ns)) diff --git a/crates/xml/src/value.rs b/crates/xml/src/value.rs index a75c301..5e18266 100644 --- a/crates/xml/src/value.rs +++ b/crates/xml/src/value.rs @@ -104,12 +104,12 @@ impl XmlDeserialize for T { } impl XmlSerialize for T { - fn serialize( + fn serialize( &self, ns: Option, tag: Option<&[u8]>, namespaces: &HashMap, - writer: &mut quick_xml::Writer, + writer: &mut quick_xml::Writer<&mut [u8]>, ) -> std::io::Result<()> { let prefix = ns .map(|ns| namespaces.get(&ns)) diff --git a/crates/xml/tests/se_struct.rs b/crates/xml/tests/se_struct.rs index f791e04..c0d696d 100644 --- a/crates/xml/tests/se_struct.rs +++ b/crates/xml/tests/se_struct.rs @@ -124,12 +124,12 @@ fn test_struct_serialize_with() { href: String, } - fn serialize_href( + fn serialize_href( val: &str, ns: Option, tag: Option<&[u8]>, namespaces: &HashMap, - writer: &mut Writer, + writer: &mut Writer<&mut [u8]>, ) -> std::io::Result<()> { val.to_uppercase().serialize(ns, tag, namespaces, writer) }