diff --git a/yaserde/tests/se_namespace.rs b/yaserde/tests/se_namespace.rs
index d046569..14453d6 100644
--- a/yaserde/tests/se_namespace.rs
+++ b/yaserde/tests/se_namespace.rs
@@ -47,12 +47,19 @@ fn ser_enum_namespace() {
pub enum XmlStruct {
#[yaserde(prefix = "ns")]
Item,
+ #[yaserde(prefix = "ns")]
+ ItemWithField(String),
}
let model = XmlStruct::Item;
let content = "ns:Item";
convert_and_validate!(model, content);
+
+ let model = XmlStruct::ItemWithField("Value".to_string());
+
+ let content = "Value";
+ convert_and_validate!(model, content);
}
#[test]
diff --git a/yaserde_derive/src/ser/expand_enum.rs b/yaserde_derive/src/ser/expand_enum.rs
index c1eedc6..f61e40f 100644
--- a/yaserde_derive/src/ser/expand_enum.rs
+++ b/yaserde_derive/src/ser/expand_enum.rs
@@ -17,16 +17,15 @@ pub fn serialize(
.variants
.iter()
.map(|variant| {
- let variant_attrs = YaSerdeAttribute::parse(&variant.attrs);
- let renamed_label = match variant_attrs.rename {
- Some(value) => Ident::new(&value, Span::call_site()),
- None => variant.ident.clone(),
- };
let label = &variant.ident;
- let label_name = if let Some(prefix) = variant_attrs.prefix {
- prefix + ":" + renamed_label.to_string().as_ref()
- } else {
- renamed_label.to_string()
+ let label_name = {
+ let variant_attrs = YaSerdeAttribute::parse(&variant.attrs);
+ let prefix = variant_attrs.prefix.map_or(String::new(), |p| p + ":");
+ let renamed_label = variant_attrs
+ .rename
+ .unwrap_or_else(|| variant.ident.to_string());
+
+ prefix + renamed_label.as_str()
};
match variant.fields {
@@ -124,11 +123,9 @@ pub fn serialize(
return None;
}
- let field_label_name = renamed_label.to_string();
-
let write_element = |action: &TokenStream| {
quote! {
- let struct_start_event = XmlEvent::start_element(#field_label_name);
+ let struct_start_event = XmlEvent::start_element(#label_name);
let _ret = writer.write(struct_start_event);
#action