pub trait Deserialize: Sized {
// Required method
fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>;
}Expand description
Types that know how to read themselves from any Decode source.
The contract is: deserialize consumes exactly the bytes that a
corresponding Serialize would have produced for the returned value, no
more and no fewer. On any malformed input it MUST return an error and
MUST NOT panic, allocate unboundedly, or read past the decoder’s
underlying source.
Round-trip invariant:
decode::<T>(&encode(&v)?)? == v for every v: T.
§Examples
use pack_io::{Decode, Decoder, Deserialize, Result, encode};
struct Point { x: i32, y: i32 }
impl Deserialize for Point {
fn deserialize<D: Decode + ?Sized>(dec: &mut D) -> Result<Self> {
Ok(Point {
x: i32::deserialize(dec)?,
y: i32::deserialize(dec)?,
})
}
}
let bytes = encode(&Point { x: 3, y: -7 }).unwrap();
let mut dec = Decoder::new(&bytes);
let back = Point::deserialize(&mut dec).unwrap();
assert_eq!((back.x, back.y), (3, -7));Required Methods§
Sourcefn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>
fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>
Read a value of Self from the decoder, advancing its cursor.
§Errors
Any crate::SerialError the underlying byte reads surface
(truncated input, invalid length prefix, hostile varint, …).
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl Deserialize for bool
impl Deserialize for bool
Source§impl Deserialize for f32
impl Deserialize for f32
Source§impl Deserialize for f64
impl Deserialize for f64
Source§impl Deserialize for i8
impl Deserialize for i8
Source§impl Deserialize for i16
impl Deserialize for i16
Source§impl Deserialize for i32
impl Deserialize for i32
Source§impl Deserialize for i64
impl Deserialize for i64
Source§impl Deserialize for i128
impl Deserialize for i128
Source§impl Deserialize for isize
impl Deserialize for isize
Source§impl Deserialize for u8
impl Deserialize for u8
Source§impl Deserialize for u16
impl Deserialize for u16
Source§impl Deserialize for u32
impl Deserialize for u32
Source§impl Deserialize for u64
impl Deserialize for u64
Source§impl Deserialize for u128
impl Deserialize for u128
Source§impl Deserialize for ()
impl Deserialize for ()
Source§impl Deserialize for usize
impl Deserialize for usize
Source§impl Deserialize for String
impl Deserialize for String
Source§impl<K, V> Deserialize for BTreeMap<K, V>
impl<K, V> Deserialize for BTreeMap<K, V>
Source§impl<K, V, S> Deserialize for HashMap<K, V, S>
Available on crate feature std only.
impl<K, V, S> Deserialize for HashMap<K, V, S>
Available on crate feature
std only.Source§impl<T0: Deserialize> Deserialize for (T0,)
impl<T0: Deserialize> Deserialize for (T0,)
Source§impl<T0: Deserialize, T1: Deserialize> Deserialize for (T0, T1)
impl<T0: Deserialize, T1: Deserialize> Deserialize for (T0, T1)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize> Deserialize for (T0, T1, T2)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize> Deserialize for (T0, T1, T2)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize> Deserialize for (T0, T1, T2, T3)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize> Deserialize for (T0, T1, T2, T3)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize> Deserialize for (T0, T1, T2, T3, T4)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize> Deserialize for (T0, T1, T2, T3, T4)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize, T8: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize, T8: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize, T8: Deserialize, T9: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize, T8: Deserialize, T9: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize, T8: Deserialize, T9: Deserialize, T10: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize, T8: Deserialize, T9: Deserialize, T10: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
Source§impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize, T8: Deserialize, T9: Deserialize, T10: Deserialize, T11: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize, T6: Deserialize, T7: Deserialize, T8: Deserialize, T9: Deserialize, T10: Deserialize, T11: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
Source§impl<T> Deserialize for BTreeSet<T>where
T: Deserialize + Ord,
impl<T> Deserialize for BTreeSet<T>where
T: Deserialize + Ord,
Source§impl<T, S> Deserialize for HashSet<T, S>
Available on crate feature std only.
impl<T, S> Deserialize for HashSet<T, S>
Available on crate feature
std only.