pub trait Deserializer: Sized {
type Error: Error;
Show 30 methods
// Required methods
fn deserialize<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_bool<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_u8<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_u16<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_u32<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_u64<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_i8<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_i16<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_i32<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_i64<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_f32<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_f64<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_char<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_str<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_string<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_bytes<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_byte_buf<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_option<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_unit<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_unit_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_newtype_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_seq<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_seq_fixed_size<V>(
self,
len: usize,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_tuple<V>(
self,
len: usize,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_tuple_struct<V>(
self,
name: &'static str,
len: usize,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_map<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_struct<V>(
self,
name: &'static str,
fields: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_struct_field<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_enum<V>(
self,
name: &'static str,
variants: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
fn deserialize_ignored_any<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>
where V: Visitor;
}Expand description
A data format that can deserialize any data structure supported by Serde.
The role of this trait is to define the deserialization half of the Serde
data model, which is a way to categorize every Rust data type into one of 28
possible types. Each method of the Serializer trait corresponds to one of
the types of the data model.
Implementations of Deserialize map themselves into this data model by
passing to the Deserializer a Visitor implementation that can receive
these various types.
The types that make up the Serde data model are:
- 12 primitive types:
- bool
- i8, i16, i32, i64
- u8, u16, u32, u64
- f32, f64
- char
- string
- byte array - u8
- option
- either none or some value
- unit
- unit is the type of () in Rust
- unit_struct
- for example
struct UnitorPhantomData<T>
- for example
- unit_variant
- the
E::AandE::Binenum E { A, B }
- the
- newtype_struct
- for example
struct Millimeters(u8)
- for example
- newtype_variant
- the
E::Ninenum E { N(u8) }
- the
- seq
- a dynamically sized sequence of values, for example
Vec<T>orHashSet<T>
- a dynamically sized sequence of values, for example
- seq_fixed_size
- a statically sized sequence of values for which the size will be known
at deserialization time without looking at the serialized data, for
example
[u64; 10]
- a statically sized sequence of values for which the size will be known
at deserialization time without looking at the serialized data, for
example
- tuple
- for example
(u8,)or(String, u64, Vec<T>)
- for example
- tuple_struct
- for example
struct Rgb(u8, u8, u8)
- for example
- tuple_variant
- the
E::Tinenum E { T(u8, u8) }
- the
- map
- for example
BTreeMap<K, V>
- for example
- struct
- a key-value pairing in which the keys will be known at deserialization
time without looking at the serialized data, for example
struct S { r: u8, g: u8, b: u8 }
- a key-value pairing in which the keys will be known at deserialization
time without looking at the serialized data, for example
- struct_variant
- the
E::Sinenum E { S { r: u8, g: u8, b: u8 } }
- the
The Deserializer trait supports two entry point styles which enables
different kinds of deserialization.
-
The
deserializemethod. Self-describing data formats like JSON are able 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 it is seeing a map. If the data format supportsDeserializer::deserialize, it will drive the Visitor using whatever type it sees in the input. JSON uses this approach when deserializingserde_json::Valuewhich is an enum that can represent any JSON document. Without knowing what is in a JSON document, we can deserialize it toserde_json::Valueby going throughDeserializer::deserialize. -
The various
deserialize_*methods. Non-self-describing formats like Bincode need to be told what is in the input in order to deserialize it. Thedeserialize_*methods are hints to the deserializer for how to interpret the next piece of input. Non-self-describing formats are not able to deserialize something likeserde_json::Valuewhich relies onDeserializer::deserialize.
When implementing Deserialize, you should avoid relying on
Deserializer::deserialize unless you need to be told by the Deserializer
what type is in the input. Know that relying on Deserializer::deserialize
means your data type will be able to deserialize from self-describing
formats only, ruling out Bincode and many others.
Required Associated Types§
Required Methods§
Sourcefn deserialize<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Require the Deserializer to figure out how to drive the visitor based
on what data type is in the input.
When implementing Deserialize, you should avoid relying on
Deserializer::deserialize unless you need to be told by the
Deserializer what type is in the input. Know that relying on
Deserializer::deserialize means your data type will be able to
deserialize from self-describing formats only, ruling out Bincode and
many others.
Sourcefn deserialize_bool<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_bool<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a bool value.
Sourcefn deserialize_u8<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_u8<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a u8 value.
Sourcefn deserialize_u16<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_u16<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a u16 value.
Sourcefn deserialize_u32<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_u32<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a u32 value.
Sourcefn deserialize_u64<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_u64<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a u64 value.
Sourcefn deserialize_i8<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_i8<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting an i8 value.
Sourcefn deserialize_i16<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_i16<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting an i16 value.
Sourcefn deserialize_i32<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_i32<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting an i32 value.
Sourcefn deserialize_i64<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_i64<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting an i64 value.
Sourcefn deserialize_f32<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_f32<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a f32 value.
Sourcefn deserialize_f64<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_f64<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a f64 value.
Sourcefn deserialize_char<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_char<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a char value.
Sourcefn deserialize_str<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_str<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a string value and does
not benefit from taking ownership of buffered data owned by the
Deserializer.
If the Visitor would benefit from taking ownership of String data,
indiciate this to the Deserializer by using deserialize_string
instead.
Sourcefn deserialize_string<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_string<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a string value and would
benefit from taking ownership of buffered data owned by the
Deserializer.
If the Visitor would not benefit from taking ownership of String
data, indicate that to the Deserializer by using deserialize_str
instead.
Sourcefn deserialize_bytes<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_bytes<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a byte array and does not
benefit from taking ownership of buffered data owned by the
Deserializer.
If the Visitor would benefit from taking ownership of Vec<u8> data,
indicate this to the Deserializer by using deserialize_byte_buf
instead.
Sourcefn deserialize_byte_buf<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_byte_buf<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a byte array and would
benefit from taking ownership of buffered data owned by the
Deserializer.
If the Visitor would not benefit from taking ownership of Vec<u8>
data, indicate that to the Deserializer by using deserialize_bytes
instead.
Sourcefn deserialize_option<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_option<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting an optional value.
This allows deserializers that encode an optional value as a nullable
value to convert the null value into None and a regular value into
Some(value).
Sourcefn deserialize_unit<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_unit<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a unit value.
Sourcefn deserialize_unit_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_unit_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a unit struct with a
particular name.
Sourcefn deserialize_newtype_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_newtype_struct<V>(
self,
name: &'static str,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a newtype struct with a
particular name.
Sourcefn deserialize_seq<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_seq<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a sequence of values.
Sourcefn deserialize_seq_fixed_size<V>(
self,
len: usize,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_seq_fixed_size<V>(
self,
len: usize,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a sequence of values and
knows how many values there are without looking at the serialized data.
Sourcefn deserialize_tuple<V>(
self,
len: usize,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_tuple<V>(
self,
len: usize,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a tuple value with a
particular number of elements.
Sourcefn deserialize_tuple_struct<V>(
self,
name: &'static str,
len: usize,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_tuple_struct<V>(
self,
name: &'static str,
len: usize,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a tuple struct with a
particular name and number of fields.
Sourcefn deserialize_map<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_map<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a map of key-value pairs.
Sourcefn deserialize_struct<V>(
self,
name: &'static str,
fields: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_struct<V>(
self,
name: &'static str,
fields: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting a struct with a particular
name and fields.
Sourcefn deserialize_struct_field<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_struct_field<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting the name of a struct
field.
Sourcefn deserialize_enum<V>(
self,
name: &'static str,
variants: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_enum<V>(
self,
name: &'static str,
variants: &'static [&'static str],
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type is expecting an enum value with a
particular name and possible variants.
Sourcefn deserialize_ignored_any<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
fn deserialize_ignored_any<V>(
self,
visitor: V,
) -> Result<<V as Visitor>::Value, Self::Error>where
V: Visitor,
Hint that the Deserialize type needs to deserialize a value whose type
doesn’t matter because it is ignored.
Deserializers for non-self-describing formats may not support this mode.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.