diff --git a/crates/xml/derive/src/xml_struct.rs b/crates/xml/derive/src/xml_struct.rs index 7b9adeb..21b5c4f 100644 --- a/crates/xml/derive/src/xml_struct.rs +++ b/crates/xml/derive/src/xml_struct.rs @@ -221,6 +221,8 @@ impl NamedStruct { } }); + let is_empty = tag_writers.len() == 0; + quote! { impl #impl_generics ::rustical_xml::XmlSerialize for #ident #type_generics #where_clause { fn serialize( @@ -240,11 +242,17 @@ impl NamedStruct { bytes_start.extend_attributes(attrs); } #(#untagged_attributes);* - writer.write_event(Event::Start(bytes_start))?; + if #is_empty { + writer.write_event(Event::Empty(bytes_start))?; + } else { + writer.write_event(Event::Start(bytes_start))?; + } } - #(#tag_writers);* - if let Some(tag) = &tag_str { - writer.write_event(Event::End(BytesEnd::new(tag.to_owned())))?; + if !#is_empty { + #(#tag_writers);* + if let Some(tag) = &tag_str { + writer.write_event(Event::End(BytesEnd::new(tag.to_owned())))?; + } } Ok(()) }