mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-05-01 13:38:01 +00:00
add a "ignore_field" handler when a deserializable is skipping a field
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user