Merge pull request #878 from serde-rs/deserialize_any

Rename Deserializer::deserialize to deserialize_any
This commit is contained in:
David Tolnay 2017-04-14 13:04:20 -07:00 committed by GitHub
commit 637332de2d
7 changed files with 116 additions and 116 deletions

View File

@ -1070,7 +1070,7 @@ impl<'de> Deserialize<'de> for OsStringKind {
} }
} }
deserializer.deserialize(KindVisitor) deserializer.deserialize_identifier(KindVisitor)
} }
} }
@ -1581,7 +1581,7 @@ where
} }
} }
deserializer.deserialize(FieldVisitor) deserializer.deserialize_identifier(FieldVisitor)
} }
} }

View File

@ -763,22 +763,22 @@ where
/// to look at the serialized data and tell what it represents. For example /// to look at the serialized data and tell what it represents. For example
/// the JSON deserializer may see an opening curly brace (`{`) and know that /// the JSON deserializer may see an opening curly brace (`{`) and know that
/// it is seeing a map. If the data format supports /// it is seeing a map. If the data format supports
/// `Deserializer::deserialize`, it will drive the Visitor using whatever /// `Deserializer::deserialize_any`, it will drive the Visitor using whatever
/// type it sees in the input. JSON uses this approach when deserializing /// type it sees in the input. JSON uses this approach when deserializing
/// `serde_json::Value` which is an enum that can represent any JSON /// `serde_json::Value` which is an enum that can represent any JSON
/// document. Without knowing what is in a JSON document, we can deserialize /// document. Without knowing what is in a JSON document, we can deserialize
/// it to `serde_json::Value` by going through `Deserializer::deserialize`. /// it to `serde_json::Value` by going through `Deserializer::deserialize_any`.
/// ///
/// 2. The various `deserialize_*` methods. Non-self-describing formats like /// 2. The various `deserialize_*` methods. Non-self-describing formats like
/// Bincode need to be told what is in the input in order to deserialize it. /// Bincode need to be told what is in the input in order to deserialize it.
/// The `deserialize_*` methods are hints to the deserializer for how to /// The `deserialize_*` methods are hints to the deserializer for how to
/// interpret the next piece of input. Non-self-describing formats are not /// interpret the next piece of input. Non-self-describing formats are not
/// able to deserialize something like `serde_json::Value` which relies on /// able to deserialize something like `serde_json::Value` which relies on
/// `Deserializer::deserialize`. /// `Deserializer::deserialize_any`.
/// ///
/// When implementing `Deserialize`, you should avoid relying on /// When implementing `Deserialize`, you should avoid relying on
/// `Deserializer::deserialize` unless you need to be told by the Deserializer /// `Deserializer::deserialize_any` unless you need to be told by the Deserializer
/// what type is in the input. Know that relying on `Deserializer::deserialize` /// what type is in the input. Know that relying on `Deserializer::deserialize_any`
/// means your data type will be able to deserialize from self-describing /// means your data type will be able to deserialize from self-describing
/// formats only, ruling out Bincode and many others. /// formats only, ruling out Bincode and many others.
pub trait Deserializer<'de>: Sized { pub trait Deserializer<'de>: Sized {
@ -790,12 +790,12 @@ pub trait Deserializer<'de>: Sized {
/// on what data type is in the input. /// on what data type is in the input.
/// ///
/// When implementing `Deserialize`, you should avoid relying on /// When implementing `Deserialize`, you should avoid relying on
/// `Deserializer::deserialize` unless you need to be told by the /// `Deserializer::deserialize_any` unless you need to be told by the
/// Deserializer what type is in the input. Know that relying on /// Deserializer what type is in the input. Know that relying on
/// `Deserializer::deserialize` means your data type will be able to /// `Deserializer::deserialize_any` means your data type will be able to
/// deserialize from self-describing formats only, ruling out Bincode and /// deserialize from self-describing formats only, ruling out Bincode and
/// many others. /// many others.
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: Visitor<'de>; V: Visitor<'de>;

View File

@ -88,13 +88,13 @@ where
{ {
type Error = E; type Error = E;
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit seq bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit seq
seq_fixed_size bytes map unit_struct newtype_struct tuple_struct struct seq_fixed_size bytes map unit_struct newtype_struct tuple_struct struct
identifier tuple enum ignored_any byte_buf identifier tuple enum ignored_any byte_buf
} }
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -140,13 +140,13 @@ macro_rules! primitive_deserializer {
{ {
type Error = E; type Error = E;
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit
option seq seq_fixed_size bytes map unit_struct newtype_struct option seq seq_fixed_size bytes map unit_struct newtype_struct
tuple_struct struct identifier tuple enum ignored_any byte_buf tuple_struct struct identifier tuple enum ignored_any byte_buf
} }
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -197,13 +197,13 @@ where
{ {
type Error = E; type Error = E;
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct
struct identifier tuple ignored_any byte_buf struct identifier tuple ignored_any byte_buf
} }
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -267,7 +267,7 @@ where
{ {
type Error = E; type Error = E;
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -286,7 +286,7 @@ where
visitor.visit_enum(self) visitor.visit_enum(self)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct
struct identifier tuple ignored_any byte_buf struct identifier tuple ignored_any byte_buf
@ -340,7 +340,7 @@ where
{ {
type Error = E; type Error = E;
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -359,7 +359,7 @@ where
visitor.visit_enum(self) visitor.visit_enum(self)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct
struct identifier tuple ignored_any byte_buf struct identifier tuple ignored_any byte_buf
@ -414,7 +414,7 @@ where
{ {
type Error = E; type Error = E;
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -436,7 +436,7 @@ where
visitor.visit_enum(self) visitor.visit_enum(self)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct
struct identifier tuple ignored_any byte_buf struct identifier tuple ignored_any byte_buf
@ -508,7 +508,7 @@ where
{ {
type Error = E; type Error = E;
fn deserialize<V>(mut self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(mut self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -517,7 +517,7 @@ where
Ok(v) Ok(v)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct
struct identifier tuple enum ignored_any byte_buf struct identifier tuple enum ignored_any byte_buf
@ -624,14 +624,14 @@ where
{ {
type Error = V_::Error; type Error = V_::Error;
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
visitor.visit_seq(self.visitor) visitor.visit_seq(self.visitor)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct
struct identifier tuple enum ignored_any byte_buf struct identifier tuple enum ignored_any byte_buf
@ -712,7 +712,7 @@ where
{ {
type Error = E; type Error = E;
fn deserialize<V_>(mut self, visitor: V_) -> Result<V_::Value, Self::Error> fn deserialize_any<V_>(mut self, visitor: V_) -> Result<V_::Value, Self::Error>
where where
V_: de::Visitor<'de>, V_: de::Visitor<'de>,
{ {
@ -740,7 +740,7 @@ where
self.deserialize_seq(visitor) self.deserialize_seq(visitor)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
bytes map unit_struct newtype_struct tuple_struct struct identifier bytes map unit_struct newtype_struct tuple_struct struct identifier
tuple enum ignored_any byte_buf tuple enum ignored_any byte_buf
@ -888,13 +888,13 @@ where
{ {
type Error = E; type Error = E;
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
bytes map unit_struct newtype_struct tuple_struct struct identifier bytes map unit_struct newtype_struct tuple_struct struct identifier
tuple enum ignored_any byte_buf tuple enum ignored_any byte_buf
} }
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -1029,14 +1029,14 @@ where
{ {
type Error = V_::Error; type Error = V_::Error;
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
visitor.visit_map(self.visitor) visitor.visit_map(self.visitor)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct
struct identifier tuple enum ignored_any byte_buf struct identifier tuple enum ignored_any byte_buf

View File

@ -30,7 +30,7 @@
/// # impl<'de> Deserializer<'de> for MyDeserializer { /// # impl<'de> Deserializer<'de> for MyDeserializer {
/// # type Error = value::Error; /// # type Error = value::Error;
/// # /// #
/// # fn deserialize<V>(self, _: V) -> Result<V::Value, Self::Error> /// # fn deserialize_any<V>(self, _: V) -> Result<V::Value, Self::Error>
/// # where V: Visitor<'de> /// # where V: Visitor<'de>
/// # { /// # {
/// # unimplemented!() /// # unimplemented!()
@ -40,10 +40,10 @@
/// fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error> /// fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>
/// where V: Visitor<'de> /// where V: Visitor<'de>
/// { /// {
/// self.deserialize(visitor) /// self.deserialize_any(visitor)
/// } /// }
/// # /// #
/// # forward_to_deserialize! { /// # forward_to_deserialize_any! {
/// # u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option /// # u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
/// # seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct /// # seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct
/// # tuple_struct struct identifier tuple enum ignored_any /// # tuple_struct struct identifier tuple enum ignored_any
@ -53,9 +53,9 @@
/// # fn main() {} /// # fn main() {}
/// ``` /// ```
/// ///
/// The `forward_to_deserialize!` macro implements these simple forwarding /// The `forward_to_deserialize_any!` macro implements these simple forwarding
/// methods so that they forward directly to [`Deserializer::deserialize`]. You /// methods so that they forward directly to [`Deserializer::deserialize_any`].
/// can choose which methods to forward. /// You can choose which methods to forward.
/// ///
/// ```rust /// ```rust
/// # #[macro_use] /// # #[macro_use]
@ -68,7 +68,7 @@
/// impl<'de> Deserializer<'de> for MyDeserializer { /// impl<'de> Deserializer<'de> for MyDeserializer {
/// # type Error = value::Error; /// # type Error = value::Error;
/// # /// #
/// fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> /// fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
/// where V: Visitor<'de> /// where V: Visitor<'de>
/// { /// {
/// /* ... */ /// /* ... */
@ -76,7 +76,7 @@
/// # unimplemented!() /// # unimplemented!()
/// } /// }
/// ///
/// forward_to_deserialize! { /// forward_to_deserialize_any! {
/// bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option /// bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
/// seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct /// seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct
/// tuple_struct struct identifier tuple enum ignored_any /// tuple_struct struct identifier tuple enum ignored_any
@ -104,13 +104,13 @@
/// # impl<'q, V> Deserializer<'q> for MyDeserializer<V> { /// # impl<'q, V> Deserializer<'q> for MyDeserializer<V> {
/// # type Error = value::Error; /// # type Error = value::Error;
/// # /// #
/// # fn deserialize<W>(self, visitor: W) -> Result<W::Value, Self::Error> /// # fn deserialize_any<W>(self, visitor: W) -> Result<W::Value, Self::Error>
/// # where W: Visitor<'q> /// # where W: Visitor<'q>
/// # { /// # {
/// # unimplemented!() /// # unimplemented!()
/// # } /// # }
/// # /// #
/// forward_to_deserialize! { /// forward_to_deserialize_any! {
/// <W: Visitor<'q>> /// <W: Visitor<'q>>
/// bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option /// bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
/// seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct /// seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct
@ -123,21 +123,21 @@
/// ///
/// [`Deserializer`]: trait.Deserializer.html /// [`Deserializer`]: trait.Deserializer.html
/// [`Visitor`]: de/trait.Visitor.html /// [`Visitor`]: de/trait.Visitor.html
/// [`Deserializer::deserialize`]: trait.Deserializer.html#tymethod.deserialize /// [`Deserializer::deserialize_any`]: trait.Deserializer.html#tymethod.deserialize_any
#[macro_export] #[macro_export]
macro_rules! forward_to_deserialize { macro_rules! forward_to_deserialize_any {
(<$visitor:ident: Visitor<$lifetime:tt>> $($func:ident)*) => { (<$visitor:ident: Visitor<$lifetime:tt>> $($func:ident)*) => {
$(forward_to_deserialize_helper!{$func<$lifetime, $visitor>})* $(forward_to_deserialize_any_helper!{$func<$lifetime, $visitor>})*
}; };
// This case must be after the previous one. // This case must be after the previous one.
($($func:ident)*) => { ($($func:ident)*) => {
$(forward_to_deserialize_helper!{$func<'de, V>})* $(forward_to_deserialize_any_helper!{$func<'de, V>})*
}; };
} }
#[doc(hidden)] #[doc(hidden)]
#[macro_export] #[macro_export]
macro_rules! forward_to_deserialize_method { macro_rules! forward_to_deserialize_any_method {
($func:ident<$l:tt, $v:ident>($($arg:ident : $ty:ty),*)) => { ($func:ident<$l:tt, $v:ident>($($arg:ident : $ty:ty),*)) => {
#[inline] #[inline]
fn $func<$v>(self, $($arg: $ty,)* visitor: $v) -> $crate::export::Result<$v::Value, Self::Error> fn $func<$v>(self, $($arg: $ty,)* visitor: $v) -> $crate::export::Result<$v::Value, Self::Error>
@ -147,99 +147,99 @@ macro_rules! forward_to_deserialize_method {
$( $(
let _ = $arg; let _ = $arg;
)* )*
self.deserialize(visitor) self.deserialize_any(visitor)
} }
}; };
} }
#[doc(hidden)] #[doc(hidden)]
#[macro_export] #[macro_export]
macro_rules! forward_to_deserialize_helper { macro_rules! forward_to_deserialize_any_helper {
(bool<$l:tt, $v:ident>) => { (bool<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_bool<$l, $v>()} forward_to_deserialize_any_method!{deserialize_bool<$l, $v>()}
}; };
(u8<$l:tt, $v:ident>) => { (u8<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_u8<$l, $v>()} forward_to_deserialize_any_method!{deserialize_u8<$l, $v>()}
}; };
(u16<$l:tt, $v:ident>) => { (u16<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_u16<$l, $v>()} forward_to_deserialize_any_method!{deserialize_u16<$l, $v>()}
}; };
(u32<$l:tt, $v:ident>) => { (u32<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_u32<$l, $v>()} forward_to_deserialize_any_method!{deserialize_u32<$l, $v>()}
}; };
(u64<$l:tt, $v:ident>) => { (u64<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_u64<$l, $v>()} forward_to_deserialize_any_method!{deserialize_u64<$l, $v>()}
}; };
(i8<$l:tt, $v:ident>) => { (i8<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_i8<$l, $v>()} forward_to_deserialize_any_method!{deserialize_i8<$l, $v>()}
}; };
(i16<$l:tt, $v:ident>) => { (i16<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_i16<$l, $v>()} forward_to_deserialize_any_method!{deserialize_i16<$l, $v>()}
}; };
(i32<$l:tt, $v:ident>) => { (i32<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_i32<$l, $v>()} forward_to_deserialize_any_method!{deserialize_i32<$l, $v>()}
}; };
(i64<$l:tt, $v:ident>) => { (i64<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_i64<$l, $v>()} forward_to_deserialize_any_method!{deserialize_i64<$l, $v>()}
}; };
(f32<$l:tt, $v:ident>) => { (f32<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_f32<$l, $v>()} forward_to_deserialize_any_method!{deserialize_f32<$l, $v>()}
}; };
(f64<$l:tt, $v:ident>) => { (f64<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_f64<$l, $v>()} forward_to_deserialize_any_method!{deserialize_f64<$l, $v>()}
}; };
(char<$l:tt, $v:ident>) => { (char<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_char<$l, $v>()} forward_to_deserialize_any_method!{deserialize_char<$l, $v>()}
}; };
(str<$l:tt, $v:ident>) => { (str<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_str<$l, $v>()} forward_to_deserialize_any_method!{deserialize_str<$l, $v>()}
}; };
(string<$l:tt, $v:ident>) => { (string<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_string<$l, $v>()} forward_to_deserialize_any_method!{deserialize_string<$l, $v>()}
}; };
(unit<$l:tt, $v:ident>) => { (unit<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_unit<$l, $v>()} forward_to_deserialize_any_method!{deserialize_unit<$l, $v>()}
}; };
(option<$l:tt, $v:ident>) => { (option<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_option<$l, $v>()} forward_to_deserialize_any_method!{deserialize_option<$l, $v>()}
}; };
(seq<$l:tt, $v:ident>) => { (seq<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_seq<$l, $v>()} forward_to_deserialize_any_method!{deserialize_seq<$l, $v>()}
}; };
(seq_fixed_size<$l:tt, $v:ident>) => { (seq_fixed_size<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_seq_fixed_size<$l, $v>(len: usize)} forward_to_deserialize_any_method!{deserialize_seq_fixed_size<$l, $v>(len: usize)}
}; };
(bytes<$l:tt, $v:ident>) => { (bytes<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_bytes<$l, $v>()} forward_to_deserialize_any_method!{deserialize_bytes<$l, $v>()}
}; };
(byte_buf<$l:tt, $v:ident>) => { (byte_buf<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_byte_buf<$l, $v>()} forward_to_deserialize_any_method!{deserialize_byte_buf<$l, $v>()}
}; };
(map<$l:tt, $v:ident>) => { (map<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_map<$l, $v>()} forward_to_deserialize_any_method!{deserialize_map<$l, $v>()}
}; };
(unit_struct<$l:tt, $v:ident>) => { (unit_struct<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_unit_struct<$l, $v>(name: &'static str)} forward_to_deserialize_any_method!{deserialize_unit_struct<$l, $v>(name: &'static str)}
}; };
(newtype_struct<$l:tt, $v:ident>) => { (newtype_struct<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_newtype_struct<$l, $v>(name: &'static str)} forward_to_deserialize_any_method!{deserialize_newtype_struct<$l, $v>(name: &'static str)}
}; };
(tuple_struct<$l:tt, $v:ident>) => { (tuple_struct<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_tuple_struct<$l, $v>(name: &'static str, len: usize)} forward_to_deserialize_any_method!{deserialize_tuple_struct<$l, $v>(name: &'static str, len: usize)}
}; };
(struct<$l:tt, $v:ident>) => { (struct<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_struct<$l, $v>(name: &'static str, fields: &'static [&'static str])} forward_to_deserialize_any_method!{deserialize_struct<$l, $v>(name: &'static str, fields: &'static [&'static str])}
}; };
(identifier<$l:tt, $v:ident>) => { (identifier<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_identifier<$l, $v>()} forward_to_deserialize_any_method!{deserialize_identifier<$l, $v>()}
}; };
(tuple<$l:tt, $v:ident>) => { (tuple<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_tuple<$l, $v>(len: usize)} forward_to_deserialize_any_method!{deserialize_tuple<$l, $v>(len: usize)}
}; };
(enum<$l:tt, $v:ident>) => { (enum<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_enum<$l, $v>(name: &'static str, variants: &'static [&'static str])} forward_to_deserialize_any_method!{deserialize_enum<$l, $v>(name: &'static str, variants: &'static [&'static str])}
}; };
(ignored_any<$l:tt, $v:ident>) => { (ignored_any<$l:tt, $v:ident>) => {
forward_to_deserialize_method!{deserialize_ignored_any<$l, $v>()} forward_to_deserialize_any_method!{deserialize_ignored_any<$l, $v>()}
}; };
} }

View File

@ -33,7 +33,7 @@ where
{ {
type Error = E; type Error = E;
fn deserialize<V>(self, _visitor: V) -> Result<V::Value, E> fn deserialize_any<V>(self, _visitor: V) -> Result<V::Value, E>
where where
V: Visitor<'de>, V: Visitor<'de>,
{ {
@ -47,7 +47,7 @@ where
visitor.visit_none() visitor.visit_none()
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit seq bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit seq
seq_fixed_size bytes byte_buf map unit_struct newtype_struct seq_fixed_size bytes byte_buf map unit_struct newtype_struct
tuple_struct struct identifier tuple enum ignored_any tuple_struct struct identifier tuple enum ignored_any
@ -271,7 +271,7 @@ mod content {
{ {
// Untagged and internally tagged enums are only supported in // Untagged and internally tagged enums are only supported in
// self-describing formats. // self-describing formats.
deserializer.deserialize(ContentVisitor) deserializer.deserialize_any(ContentVisitor)
} }
} }
@ -481,7 +481,7 @@ mod content {
{ {
// Internally tagged enums are only supported in self-describing // Internally tagged enums are only supported in self-describing
// formats. // formats.
deserializer.deserialize(self) deserializer.deserialize_any(self)
} }
} }
@ -745,7 +745,7 @@ mod content {
{ {
// Internally tagged enums are only supported in self-describing // Internally tagged enums are only supported in self-describing
// formats. // formats.
deserializer.deserialize(self) deserializer.deserialize_any(self)
} }
} }
@ -854,7 +854,7 @@ mod content {
{ {
type Error = E; type Error = E;
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: Visitor<'de>, V: Visitor<'de>,
{ {
@ -969,7 +969,7 @@ mod content {
) )
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit seq bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit seq
seq_fixed_size bytes byte_buf map unit_struct tuple_struct struct seq_fixed_size bytes byte_buf map unit_struct tuple_struct struct
identifier tuple ignored_any identifier tuple ignored_any
@ -1057,7 +1057,7 @@ mod content {
{ {
match self.value { match self.value {
Some(Content::Seq(v)) => { Some(Content::Seq(v)) => {
de::Deserializer::deserialize(SeqDeserializer::new(v), visitor) de::Deserializer::deserialize_any(SeqDeserializer::new(v), visitor)
} }
Some(other) => Err(de::Error::invalid_type(other.unexpected(), &"tuple variant"),), Some(other) => Err(de::Error::invalid_type(other.unexpected(), &"tuple variant"),),
None => Err(de::Error::invalid_type(de::Unexpected::UnitVariant, &"tuple variant"),), None => Err(de::Error::invalid_type(de::Unexpected::UnitVariant, &"tuple variant"),),
@ -1074,7 +1074,7 @@ mod content {
{ {
match self.value { match self.value {
Some(Content::Map(v)) => { Some(Content::Map(v)) => {
de::Deserializer::deserialize(MapDeserializer::new(v), visitor) de::Deserializer::deserialize_any(MapDeserializer::new(v), visitor)
} }
Some(other) => Err(de::Error::invalid_type(other.unexpected(), &"struct variant"),), Some(other) => Err(de::Error::invalid_type(other.unexpected(), &"struct variant"),),
_ => Err(de::Error::invalid_type(de::Unexpected::UnitVariant, &"struct variant"),), _ => Err(de::Error::invalid_type(de::Unexpected::UnitVariant, &"struct variant"),),
@ -1109,7 +1109,7 @@ mod content {
type Error = E; type Error = E;
#[inline] #[inline]
fn deserialize<V>(mut self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(mut self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -1127,7 +1127,7 @@ mod content {
} }
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct
tuple_struct struct identifier tuple enum ignored_any tuple_struct struct identifier tuple enum ignored_any
@ -1221,14 +1221,14 @@ mod content {
type Error = E; type Error = E;
#[inline] #[inline]
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
visitor.visit_map(self) visitor.visit_map(self)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct
tuple_struct struct identifier tuple enum ignored_any tuple_struct struct identifier tuple enum ignored_any
@ -1250,7 +1250,7 @@ mod content {
{ {
type Error = E; type Error = E;
fn deserialize<V>(self, visitor: V) -> Result<V::Value, E> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, E>
where where
V: Visitor<'de>, V: Visitor<'de>,
{ {
@ -1365,7 +1365,7 @@ mod content {
) )
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit seq bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit seq
seq_fixed_size bytes byte_buf map unit_struct tuple_struct struct seq_fixed_size bytes byte_buf map unit_struct tuple_struct struct
identifier tuple ignored_any identifier tuple ignored_any
@ -1450,7 +1450,7 @@ mod content {
{ {
match self.value { match self.value {
Some(&Content::Seq(ref v)) => { Some(&Content::Seq(ref v)) => {
de::Deserializer::deserialize(SeqRefDeserializer::new(v), visitor) de::Deserializer::deserialize_any(SeqRefDeserializer::new(v), visitor)
} }
Some(other) => Err(de::Error::invalid_type(other.unexpected(), &"tuple variant"),), Some(other) => Err(de::Error::invalid_type(other.unexpected(), &"tuple variant"),),
None => Err(de::Error::invalid_type(de::Unexpected::UnitVariant, &"tuple variant"),), None => Err(de::Error::invalid_type(de::Unexpected::UnitVariant, &"tuple variant"),),
@ -1467,7 +1467,7 @@ mod content {
{ {
match self.value { match self.value {
Some(&Content::Map(ref v)) => { Some(&Content::Map(ref v)) => {
de::Deserializer::deserialize(MapRefDeserializer::new(v), visitor) de::Deserializer::deserialize_any(MapRefDeserializer::new(v), visitor)
} }
Some(other) => Err(de::Error::invalid_type(other.unexpected(), &"struct variant"),), Some(other) => Err(de::Error::invalid_type(other.unexpected(), &"struct variant"),),
_ => Err(de::Error::invalid_type(de::Unexpected::UnitVariant, &"struct variant"),), _ => Err(de::Error::invalid_type(de::Unexpected::UnitVariant, &"struct variant"),),
@ -1502,7 +1502,7 @@ mod content {
type Error = E; type Error = E;
#[inline] #[inline]
fn deserialize<V>(mut self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(mut self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
@ -1520,7 +1520,7 @@ mod content {
} }
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct
tuple_struct struct identifier tuple enum ignored_any tuple_struct struct identifier tuple enum ignored_any
@ -1615,14 +1615,14 @@ mod content {
type Error = E; type Error = E;
#[inline] #[inline]
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
visitor.visit_map(self) visitor.visit_map(self)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct seq seq_fixed_size bytes byte_buf map unit_struct newtype_struct
tuple_struct struct identifier tuple enum ignored_any tuple_struct struct identifier tuple enum ignored_any

View File

@ -497,7 +497,7 @@ fn deserialize_struct(
}; };
let dispatch = if let Some(deserializer) = deserializer { let dispatch = if let Some(deserializer) = deserializer {
quote! { quote! {
_serde::Deserializer::deserialize(#deserializer, #visitor_expr) _serde::Deserializer::deserialize_any(#deserializer, #visitor_expr)
} }
} else if is_enum { } else if is_enum {
quote! { quote! {
@ -729,7 +729,7 @@ fn deserialize_internally_tagged_enum(
#variants_stmt #variants_stmt
let __tagged = try!(_serde::Deserializer::deserialize( let __tagged = try!(_serde::Deserializer::deserialize_any(
__deserializer, __deserializer,
_serde::private::de::TaggedContentVisitor::<__Field>::new(#tag))); _serde::private::de::TaggedContentVisitor::<__Field>::new(#tag)));
@ -1083,7 +1083,7 @@ fn deserialize_internally_tagged_variant(
let type_name = params.type_name(); let type_name = params.type_name();
let variant_name = variant.ident.as_ref(); let variant_name = variant.ident.as_ref();
quote_block! { quote_block! {
try!(_serde::Deserializer::deserialize(#deserializer, _serde::private::de::InternallyTaggedUnitVisitor::new(#type_name, #variant_name))); try!(_serde::Deserializer::deserialize_any(#deserializer, _serde::private::de::InternallyTaggedUnitVisitor::new(#type_name, #variant_name)));
_serde::export::Ok(#this::#variant_ident) _serde::export::Ok(#this::#variant_ident)
} }
} }
@ -1109,7 +1109,7 @@ fn deserialize_untagged_variant(
let variant_name = variant.ident.as_ref(); let variant_name = variant.ident.as_ref();
quote_expr! { quote_expr! {
_serde::export::Result::map( _serde::export::Result::map(
_serde::Deserializer::deserialize( _serde::Deserializer::deserialize_any(
#deserializer, #deserializer,
_serde::private::de::UntaggedUnitVisitor::new(#type_name, #variant_name) _serde::private::de::UntaggedUnitVisitor::new(#type_name, #variant_name)
), ),

View File

@ -97,12 +97,12 @@ impl<'de> Deserializer<'de> {
impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> { impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
type Error = Error; type Error = Error;
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit
seq bytes byte_buf map identifier ignored_any seq bytes byte_buf map identifier ignored_any
} }
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Error>
where where
V: Visitor<'de>, V: Visitor<'de>,
{ {
@ -192,7 +192,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
self.next_token(); self.next_token();
visitor.visit_some(self) visitor.visit_some(self)
} }
Some(_) => self.deserialize(visitor), Some(_) => self.deserialize_any(visitor),
None => Err(Error::EndOfTokens), None => Err(Error::EndOfTokens),
} }
} }
@ -239,7 +239,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
Err(Error::InvalidName(n)) Err(Error::InvalidName(n))
} }
} }
Some(_) => self.deserialize(visitor), Some(_) => self.deserialize_any(visitor),
None => Err(Error::EndOfTokens), None => Err(Error::EndOfTokens),
} }
} }
@ -257,7 +257,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
Err(Error::InvalidName(n)) Err(Error::InvalidName(n))
} }
} }
Some(_) => self.deserialize(visitor), Some(_) => self.deserialize_any(visitor),
None => Err(Error::EndOfTokens), None => Err(Error::EndOfTokens),
} }
} }
@ -271,7 +271,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
self.next_token(); self.next_token();
self.visit_seq(Some(len), Token::SeqEnd, visitor) self.visit_seq(Some(len), Token::SeqEnd, visitor)
} }
Some(_) => self.deserialize(visitor), Some(_) => self.deserialize_any(visitor),
None => Err(Error::EndOfTokens), None => Err(Error::EndOfTokens),
} }
} }
@ -302,7 +302,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
self.next_token(); self.next_token();
self.visit_seq(Some(len), Token::TupleStructEnd, visitor) self.visit_seq(Some(len), Token::TupleStructEnd, visitor)
} }
Some(_) => self.deserialize(visitor), Some(_) => self.deserialize_any(visitor),
None => Err(Error::EndOfTokens), None => Err(Error::EndOfTokens),
} }
} }
@ -349,7 +349,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
Err(Error::InvalidName(n)) Err(Error::InvalidName(n))
} }
} }
Some(_) => self.deserialize(visitor), Some(_) => self.deserialize_any(visitor),
None => Err(Error::EndOfTokens), None => Err(Error::EndOfTokens),
} }
} }
@ -376,7 +376,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
self.next_token(); self.next_token();
self.visit_map(Some(fields.len()), Token::MapEnd, visitor) self.visit_map(Some(fields.len()), Token::MapEnd, visitor)
} }
Some(_) => self.deserialize(visitor), Some(_) => self.deserialize_any(visitor),
None => Err(Error::EndOfTokens), None => Err(Error::EndOfTokens),
} }
} }
@ -529,7 +529,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> {
Err(Error::UnexpectedToken(token)) Err(Error::UnexpectedToken(token))
} }
} }
Some(_) => de::Deserializer::deserialize(self.de, visitor), Some(_) => de::Deserializer::deserialize_any(self.de, visitor),
None => Err(Error::EndOfTokens), None => Err(Error::EndOfTokens),
} }
} }
@ -559,7 +559,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> {
Err(Error::UnexpectedToken(token)) Err(Error::UnexpectedToken(token))
} }
} }
Some(_) => de::Deserializer::deserialize(self.de, visitor), Some(_) => de::Deserializer::deserialize_any(self.de, visitor),
None => Err(Error::EndOfTokens), None => Err(Error::EndOfTokens),
} }
} }
@ -649,14 +649,14 @@ struct BytesDeserializer {
impl<'de> de::Deserializer<'de> for BytesDeserializer { impl<'de> de::Deserializer<'de> for BytesDeserializer {
type Error = Error; type Error = Error;
fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where where
V: de::Visitor<'de>, V: de::Visitor<'de>,
{ {
visitor.visit_bytes(self.value) visitor.visit_bytes(self.value)
} }
forward_to_deserialize! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string unit option
seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct seq seq_fixed_size bytes map unit_struct newtype_struct tuple_struct
struct identifier tuple enum ignored_any byte_buf struct identifier tuple enum ignored_any byte_buf