Merge pull request #33 from DmitrySamoylov/fix-unnamed-enum-namespace-prefix

Fix unnamed enum variants ignored namespace prefix while serializing
This commit is contained in:
Marc-Antoine ARNAUD 2020-01-20 16:48:14 +01:00 committed by GitHub
commit 6bbb9676d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 12 deletions

View File

@ -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 = "<?xml version=\"1.0\" encoding=\"utf-8\"?><ns:root xmlns:ns=\"http://www.sample.com/ns/domain\">ns:Item</ns:root>";
convert_and_validate!(model, content);
let model = XmlStruct::ItemWithField("Value".to_string());
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><ns:root xmlns:ns=\"http://www.sample.com/ns/domain\"><ns:ItemWithField>Value</ns:ItemWithField></ns:root>";
convert_and_validate!(model, content);
}
#[test]

View File

@ -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