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:
commit
6bbb9676d0
@ -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]
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user