Skip to main content

Deserialize

Trait Deserialize 

Source
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§

Source

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

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for f32

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for f64

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for i8

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for i16

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for i32

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for i64

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for i128

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for isize

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for u8

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for u16

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for u32

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for u64

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for u128

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for ()

Source§

fn deserialize<D: Decode + ?Sized>(_decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for usize

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl Deserialize for String

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<K, V> Deserialize for BTreeMap<K, V>
where K: Deserialize + Ord, V: Deserialize,

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<K, V, S> Deserialize for HashMap<K, V, S>

Available on crate feature std only.
Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T0: Deserialize> Deserialize for (T0,)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T0: Deserialize, T1: Deserialize> Deserialize for (T0, T1)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T0: Deserialize, T1: Deserialize, T2: Deserialize> Deserialize for (T0, T1, T2)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize> Deserialize for (T0, T1, T2, T3)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize> Deserialize for (T0, T1, T2, T3, T4)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T0: Deserialize, T1: Deserialize, T2: Deserialize, T3: Deserialize, T4: Deserialize, T5: Deserialize> Deserialize for (T0, T1, T2, T3, T4, T5)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

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)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

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)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

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)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

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)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

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)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

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)

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T> Deserialize for BTreeSet<T>
where T: Deserialize + Ord,

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T, S> Deserialize for HashSet<T, S>
where T: Deserialize + Hash + Eq, S: BuildHasher + Default,

Available on crate feature std only.
Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T: Deserialize> Deserialize for Option<T>

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T: Deserialize> Deserialize for Vec<T>

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T: Deserialize, E: Deserialize> Deserialize for Result<T, E>

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Source§

impl<T: Deserialize, const N: usize> Deserialize for [T; N]

Source§

fn deserialize<D: Decode + ?Sized>(decoder: &mut D) -> Result<Self>

Implementors§