Generalize for_attr() to for_node()
This commit is contained in:
parent
894da25f8b
commit
508d29ccaa
|
@ -361,7 +361,7 @@ fn named_field(
|
||||||
} else {
|
} else {
|
||||||
tokens.r#match.extend(quote!(
|
tokens.r#match.extend(quote!(
|
||||||
__Attributes::#enum_name => {
|
__Attributes::#enum_name => {
|
||||||
let mut nested = deserializer.for_attr(attr);
|
let mut nested = deserializer.for_node(Node::AttributeValue(attr.value));
|
||||||
let new = <#no_lifetime_type>::deserialize(&mut nested, &mut #enum_name)?;
|
let new = <#no_lifetime_type>::deserialize(&mut nested, &mut #enum_name)?;
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
|
@ -453,14 +453,15 @@ fn unnamed_field(
|
||||||
|
|
||||||
let #name = match node {
|
let #name = match node {
|
||||||
Node::Open(data) => {
|
Node::Open(data) => {
|
||||||
|
let mut nested = deserializer.nested(data);
|
||||||
let mut value: Option<#no_lifetime_type> = None;
|
let mut value: Option<#no_lifetime_type> = None;
|
||||||
<#no_lifetime_type>::deserialize(deserializer, &mut value)?;
|
<#no_lifetime_type>::deserialize(&mut nested, &mut value)?;
|
||||||
value
|
value
|
||||||
}
|
}
|
||||||
Node::Text(data) => {
|
Node::Text(data) => {
|
||||||
deserializer.push_front(Node::Text(data));
|
let mut nested = deserializer.for_node(Node::Text(data));
|
||||||
let mut value: Option<#no_lifetime_type> = None;
|
let mut value: Option<#no_lifetime_type> = None;
|
||||||
<#no_lifetime_type>::deserialize(deserializer, &mut value)?;
|
<#no_lifetime_type>::deserialize(&mut nested, &mut value)?;
|
||||||
value
|
value
|
||||||
}
|
}
|
||||||
node => return Err(Error::UnexpectedNode(format!("{:?}", node))),
|
node => return Err(Error::UnexpectedNode(format!("{:?}", node))),
|
||||||
|
|
|
@ -59,23 +59,6 @@ impl<'cx, 'xml> Deserializer<'cx, 'xml> {
|
||||||
Deserializer::new(element, self.context)
|
Deserializer::new(element, self.context)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn for_attr<'a>(&'a mut self, attr: Attribute<'xml>) -> Deserializer<'a, 'xml>
|
|
||||||
where
|
|
||||||
'cx: 'a,
|
|
||||||
{
|
|
||||||
self.context
|
|
||||||
.records
|
|
||||||
.push_front(Node::AttributeValue(attr.value));
|
|
||||||
|
|
||||||
Deserializer {
|
|
||||||
local: self.local,
|
|
||||||
prefix: self.prefix,
|
|
||||||
level: self.level,
|
|
||||||
done: self.done,
|
|
||||||
context: self.context,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn ignore(&mut self) -> Result<(), Error> {
|
pub fn ignore(&mut self) -> Result<(), Error> {
|
||||||
loop {
|
loop {
|
||||||
match self.next() {
|
match self.next() {
|
||||||
|
@ -90,8 +73,18 @@ impl<'cx, 'xml> Deserializer<'cx, 'xml> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn push_front(&mut self, node: Node<'xml>) {
|
pub fn for_node<'a>(&'a mut self, node: Node<'xml>) -> Deserializer<'a, 'xml>
|
||||||
|
where
|
||||||
|
'cx: 'a,
|
||||||
|
{
|
||||||
self.context.records.push_front(node);
|
self.context.records.push_front(node);
|
||||||
|
Deserializer {
|
||||||
|
local: self.local,
|
||||||
|
prefix: self.prefix,
|
||||||
|
level: self.level,
|
||||||
|
done: self.done,
|
||||||
|
context: self.context,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
Loading…
Reference in New Issue