Merge branch 'master' of github.com:media-io/yaserde into fix_default_namespace_prefix

This commit is contained in:
Marc-Antoine Arnaud
2020-04-06 14:42:33 +02:00
4 changed files with 84 additions and 49 deletions

View File

@@ -214,18 +214,15 @@ fn build_unnamed_visitor_calls(
Some(quote! {
let visitor = #visitor_label{};
if let XmlEvent::StartElement {name, ..} = reader.peek()?.clone() {
if let Some(namespace) = name.namespace {
match namespace.as_str() {
bad_ns => {
let msg = format!("bad field namespace for {}, found {}",
name.local_name.as_str(),
bad_ns);
return Err(msg);
}
if let Some(namespace) = name.namespace.as_ref() {
match namespace.as_str() {
bad_ns => {
let msg = format!("bad field namespace for {}, found {}",
name.local_name.as_str(),
bad_ns);
return Err(msg);
}
}
reader.set_map_value()
}
let result = reader.read_inner_value::<#field_type, _>(|reader| {
@@ -248,7 +245,6 @@ fn build_unnamed_visitor_calls(
let call_struct_visitor = |struct_name, action| {
Some(quote! {
reader.set_map_value();
match #struct_name::deserialize(reader) {
Ok(value) => {
#action;

View File

@@ -179,10 +179,15 @@ pub fn parse(
let visit_struct = |struct_name: syn::Path, action: TokenStream| {
Some(quote! {
#label_name => {
reader.set_map_value();
let value = #struct_name::deserialize(reader)?;
#value_label #action;
let _root = reader.next_event();
if depth == 0 {
// Don't count current struct's StartElement as substruct's StartElement
let _root = reader.next_event();
}
if let Ok(XmlEvent::StartElement { .. }) = reader.peek() {
// If substruct's start element found then deserialize substruct
let value = #struct_name::deserialize(reader)?;
#value_label #action;
}
}
})
};
@@ -493,26 +498,21 @@ fn build_call_visitor(
#label_name => {
let visitor = #visitor_label{};
if let XmlEvent::StartElement {name, ..} = reader.peek()?.clone() {
if let Some(namespace) = name.namespace {
match namespace.as_str() {
#namespaces_matches
bad_ns => {
let msg = format!("bad field namespace for {}, found {}", name.local_name.as_str(), bad_ns);
return Err(msg);
}
if let Some(namespace) = name.namespace.as_ref() {
match namespace.as_str() {
#namespaces_matches
bad_ns => {
let msg = format!("bad field namespace for {}, found {}", name.local_name.as_str(), bad_ns);
return Err(msg);
}
}
reader.set_map_value()
}
let result = reader.read_inner_value::<#field_type, _>(|reader| {
if let XmlEvent::EndElement { .. } = *reader.peek()? {
return visitor.#visitor("");
}
if let Ok(XmlEvent::Characters(s)) = reader.next_event() {
visitor.#visitor(&s)
if let Ok(XmlEvent::Characters(s)) = reader.peek() {
let val = visitor.#visitor(&s);
let _event = reader.next_event()?;
val
} else {
Err(format!("unable to parse content for {}", #label_name))
}