ignored_any.rs |
|
6154 |
impls.rs |
|
97685 |
mod.rs |
Generic data structure deserialization framework.
The two most important traits in this module are [`Deserialize`] and
[`Deserializer`].
- **A type that implements `Deserialize` is a data structure** that can be
deserialized from any data format supported by Serde, and conversely
- **A type that implements `Deserializer` is a data format** that can
deserialize any data structure supported by Serde.
# The Deserialize trait
Serde provides [`Deserialize`] implementations for many Rust primitive and
standard library types. The complete list is below. All of these can be
deserialized using Serde out of the box.
Additionally, Serde provides a procedural macro called [`serde_derive`] to
automatically generate [`Deserialize`] implementations for structs and enums
in your program. See the [derive section of the manual] for how to use this.
In rare cases it may be necessary to implement [`Deserialize`] manually for
some type in your program. See the [Implementing `Deserialize`] section of
the manual for more about this.
Third-party crates may provide [`Deserialize`] implementations for types
that they expose. For example the [`linked-hash-map`] crate provides a
[`LinkedHashMap<K, V>`] type that is deserializable by Serde because the
crate provides an implementation of [`Deserialize`] for it.
# The Deserializer trait
[`Deserializer`] implementations are provided by third-party crates, for
example [`serde_json`], [`serde_yaml`] and [`postcard`].
A partial list of well-maintained formats is given on the [Serde
website][data formats].
# Implementations of Deserialize provided by Serde
This is a slightly different set of types than what is supported for
serialization. Some types can be serialized by Serde but not deserialized.
One example is `OsStr`.
- **Primitive types**:
- bool
- i8, i16, i32, i64, i128, isize
- u8, u16, u32, u64, u128, usize
- f32, f64
- char
- **Compound types**:
- \[T; 0\] through \[T; 32\]
- tuples up to size 16
- **Common standard library types**:
- String
- Option\<T\>
- Result\<T, E\>
- PhantomData\<T\>
- **Wrapper types**:
- Box\<T\>
- Box\<\[T\]\>
- Box\<str\>
- Cow\<'a, T\>
- Cell\<T\>
- RefCell\<T\>
- Mutex\<T\>
- RwLock\<T\>
- Rc\<T\> *(if* features = \["rc"\] *is enabled)*
- Arc\<T\> *(if* features = \["rc"\] *is enabled)*
- **Collection types**:
- BTreeMap\<K, V\>
- BTreeSet\<T\>
- BinaryHeap\<T\>
- HashMap\<K, V, H\>
- HashSet\<T, H\>
- LinkedList\<T\>
- VecDeque\<T\>
- Vec\<T\>
- **Zero-copy types**:
- &str
- &\[u8\]
- **FFI types**:
- CString
- Box\<CStr\>
- OsString
- **Miscellaneous standard library types**:
- Duration
- SystemTime
- Path
- PathBuf
- Range\<T\>
- RangeInclusive\<T\>
- Bound\<T\>
- num::NonZero*
- `!` *(unstable)*
- **Net types**:
- IpAddr
- Ipv4Addr
- Ipv6Addr
- SocketAddr
- SocketAddrV4
- SocketAddrV6
[Implementing `Deserialize`]: https://serde.rs/impl-deserialize.html
[`Deserialize`]: ../trait.Deserialize.html
[`Deserializer`]: ../trait.Deserializer.html
[`LinkedHashMap<K, V>`]: https://docs.rs/linked-hash-map/*/linked_hash_map/struct.LinkedHashMap.html
[`postcard`]: https://github.com/jamesmunns/postcard
[`linked-hash-map`]: https://crates.io/crates/linked-hash-map
[`serde_derive`]: https://crates.io/crates/serde_derive
[`serde_json`]: https://github.com/serde-rs/json
[`serde_yaml`]: https://github.com/dtolnay/serde-yaml
[derive section of the manual]: https://serde.rs/derive.html
[data formats]: https://serde.rs/#data-formats |
81950 |
seed.rs |
|
563 |
size_hint.rs |
|
644 |
value.rs |
Building blocks for deserializing basic values using the `IntoDeserializer`
trait.
```edition2021
use serde::de::{value, Deserialize, IntoDeserializer};
use serde_derive::Deserialize;
use std::str::FromStr;
#[derive(Deserialize)]
enum Setting {
On,
Off,
}
impl FromStr for Setting {
type Err = value::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Self::deserialize(s.into_deserializer())
}
}
``` |
45577 |