Fix (de)serialization for elements with nested namespaces

This commit is contained in:
Dmitry Samoylov
2020-02-18 15:56:09 +07:00
parent 1cda7cda70
commit 4aadc78fc1
5 changed files with 96 additions and 21 deletions

View File

@@ -17,9 +17,8 @@ pub fn parse(
let namespaces_matches: TokenStream = namespaces
.iter()
.map(|(p, ns)| {
let str_ns = ns.as_str();
if *prefix == Some(p.to_string()) {
Some(quote!(#str_ns => {}))
if prefix.as_ref() == Some(p) {
Some(quote!(#ns => {}))
} else {
None
}
@@ -382,15 +381,17 @@ pub fn parse(
};
debug!("Struct: start to parse {:?}", named_element);
if let Some(ref namespace) = struct_namespace {
match namespace.as_str() {
#namespaces_matches
bad_ns => {
let msg = format!("bad namespace for {}, found {}", named_element, bad_ns);
return Err(msg);
if reader.depth() == 0 {
if let Some(ref namespace) = struct_namespace {
match namespace.as_str() {
#namespaces_matches
bad_ns => {
let msg = format!("bad namespace for {}, found {}", named_element, bad_ns);
return Err(msg);
}
}
}
};
}
#variables
#field_visitors

View File

@@ -405,15 +405,10 @@ pub fn serialize(
let skip = writer.skip_start_end();
if !skip {
if let Some(label) = writer.get_start_event_name() {
let struct_start_event = XmlEvent::start_element(label.as_ref());
#build_attributes
let _ret = writer.write(struct_start_event);
} else {
let struct_start_event = XmlEvent::start_element(#root)#add_namespaces;
#build_attributes
let _ret = writer.write(struct_start_event);
}
let label = writer.get_start_event_name().unwrap_or_else(|| #root.to_string());
let struct_start_event = XmlEvent::start_element(label.as_ref())#add_namespaces;
#build_attributes
let _ret = writer.write(struct_start_event);
}
#struct_inspector