add a "ignore_field" handler when a deserializable is skipping a field

This commit is contained in:
Erick Tryzelaar
2014-08-18 07:40:15 -07:00
parent 45e8bd6834
commit c6d28afb6f
2 changed files with 10 additions and 5 deletions
+4 -5
View File
@@ -389,6 +389,7 @@ fn deserialize_struct_from_map(
$name = Some(
try!(::serde::de::Deserializable::deserialize($deserializer))
);
continue;
})
})
.collect();
@@ -465,13 +466,11 @@ fn deserialize_struct_from_map(
match key {
$key_arms
_ => {
// Ignore unknown fields.
let _: ::serde::de::IgnoreTokens =
try!(Deserializable::deserialize($deserializer));
}
_ => { }
}
}
try!($deserializer.ignore_field(token))
}
match $fields_tuple {
+6
View File
@@ -193,6 +193,12 @@ pub trait Deserializer<E>: Iterator<Result<Token, E>> {
/// named `field`.
fn missing_field_error(&mut self, field: &'static str) -> E;
/// Called when a deserializable has decided to not consume this token.
fn ignore_field(&mut self, _token: Token) -> Result<(), E> {
let _: IgnoreTokens = try!(Deserializable::deserialize(self));
Ok(())
}
#[inline]
fn expect_token(&mut self) -> Result<Token, E> {
match self.next() {