Skip to main content

DeserializeView

Trait DeserializeView 

Source
pub trait DeserializeView<'a>: Sized {
    // Required method
    fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>;
}
Expand description

Types that decode by borrowing directly from the input slice rather than allocating owned copies.

'a is the lifetime of the underlying byte buffer; every borrowed field in the decoded value points into that buffer. The borrow checker guarantees the value cannot outlive its source.

§Examples

Borrow string and byte fields out of a request buffer:

use pack_io::{decode_view, Decode, Decoder, DeserializeView, Result, Serialize, Encode};

// Pair of borrowed and owned versions for round-tripping.
struct OwnedMsg { id: u64, text: String, payload: Vec<u8> }
struct ViewMsg<'a> { id: u64, text: &'a str, payload: &'a [u8] }

impl Serialize for OwnedMsg {
    fn serialize<E: Encode + ?Sized>(&self, e: &mut E) -> Result<()> {
        self.id.serialize(e)?; self.text.serialize(e)?; self.payload.serialize(e)
    }
}
impl<'a> DeserializeView<'a> for ViewMsg<'a> {
    fn deserialize_view(d: &mut Decoder<'a>) -> Result<Self> {
        Ok(ViewMsg {
            id:      u64::deserialize_view(d)?,
            text:    <&str>::deserialize_view(d)?,
            payload: <&[u8]>::deserialize_view(d)?,
        })
    }
}

let bytes = pack_io::encode(&OwnedMsg {
    id: 7,
    text: "hello".into(),
    payload: vec![1, 2, 3],
}).unwrap();

let view: ViewMsg<'_> = decode_view(&bytes).unwrap();
assert_eq!(view.text, "hello");        // &str borrowed from `bytes`
assert_eq!(view.payload, &[1, 2, 3]);  // &[u8] borrowed from `bytes`

Required Methods§

Source

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Read a value of Self from decoder, borrowing from its underlying input slice where possible.

§Errors

Any crate::SerialError the underlying byte reads surface.

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<'a, K, V, S> DeserializeView<'a> for HashMap<K, V, S>
where K: DeserializeView<'a> + Hash + Eq, V: DeserializeView<'a>, S: BuildHasher + Default,

Available on crate feature std only.
Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, K, V> DeserializeView<'a> for BTreeMap<K, V>
where K: DeserializeView<'a> + Ord, V: DeserializeView<'a>,

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>, T9: DeserializeView<'a>, T10: DeserializeView<'a>, T11: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>, T9: DeserializeView<'a>, T10: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>, T9: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>, T8: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>, T7: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6, T7)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>, T6: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5, T6)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>, T5: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4, T5)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>, T4: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3, T4)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>, T3: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2, T3)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>, T2: DeserializeView<'a>> DeserializeView<'a> for (T0, T1, T2)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>, T1: DeserializeView<'a>> DeserializeView<'a> for (T0, T1)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T0: DeserializeView<'a>> DeserializeView<'a> for (T0,)

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T, S> DeserializeView<'a> for HashSet<T, S>
where T: DeserializeView<'a> + Hash + Eq, S: BuildHasher + Default,

Available on crate feature std only.
Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T: DeserializeView<'a>, E: DeserializeView<'a>> DeserializeView<'a> for Result<T, E>

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T: DeserializeView<'a>, const N: usize> DeserializeView<'a> for [T; N]

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T: DeserializeView<'a>> DeserializeView<'a> for Option<T>

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T: DeserializeView<'a>> DeserializeView<'a> for Vec<T>

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a, T> DeserializeView<'a> for BTreeSet<T>
where T: DeserializeView<'a> + Ord,

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for &'a [u8]

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for &'a str

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for ()

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for String

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for bool

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for f32

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for f64

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for i8

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for i16

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for i32

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for i64

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for i128

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for isize

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for u8

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for u16

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for u32

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for u64

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for u128

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Source§

impl<'a> DeserializeView<'a> for usize

Source§

fn deserialize_view(decoder: &mut Decoder<'a>) -> Result<Self>

Implementors§