DecodePacked

Trait DecodePacked 

Source
pub trait DecodePacked<'de, M, A>: Sized
where A: Allocator,
{ // Required method fn decode_packed<D>(decoder: D) -> Result<Self, D::Error> where D: Decoder<'de, Mode = M, Allocator = A>; }
Expand description

Trait governing how a type is decoded as a packed value.

Packed encodings are ones where data follow one after another, with no “metadata” indicating when one value starts and another stops.

This is typically used automatically through the #[musli(packed)] attribute through the Decode derive.

§Examples

use musli::Decode;

#[derive(Decode)]
struct Packed {
    #[musli(packed)]
    data: (u32, u32),
}

Implementing manually:

use musli::{Allocator, Decode, Decoder};
use musli::de::SequenceDecoder;

struct Packed {
    data: (u32, u32),
}

impl<'de, M, A> Decode<'de, M, A> for Packed
where
    A: Allocator,
{
    #[inline]
    fn decode<D>(decoder: D) -> Result<Self, D::Error>
    where
        D: Decoder<'de>,
    {
        decoder.decode_pack(|pack| {
            Ok(Self {
                data: (pack.next()?, pack.next()?),
            })
        })
    }
}

Required Methods§

Source

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Decode the given input as bytes.

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.

Implementations on Foreign Types§

Source§

impl<'de, M, A, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T0: Decode<'de, M, A>, T1: Decode<'de, M, A>, T2: Decode<'de, M, A>, T3: Decode<'de, M, A>, T4: Decode<'de, M, A>, T5: Decode<'de, M, A>, T6: Decode<'de, M, A>, T7: Decode<'de, M, A>, T8: Decode<'de, M, A>, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T1: Decode<'de, M, A>, T2: Decode<'de, M, A>, T3: Decode<'de, M, A>, T4: Decode<'de, M, A>, T5: Decode<'de, M, A>, T6: Decode<'de, M, A>, T7: Decode<'de, M, A>, T8: Decode<'de, M, A>, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T2: Decode<'de, M, A>, T3: Decode<'de, M, A>, T4: Decode<'de, M, A>, T5: Decode<'de, M, A>, T6: Decode<'de, M, A>, T7: Decode<'de, M, A>, T8: Decode<'de, M, A>, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T3: Decode<'de, M, A>, T4: Decode<'de, M, A>, T5: Decode<'de, M, A>, T6: Decode<'de, M, A>, T7: Decode<'de, M, A>, T8: Decode<'de, M, A>, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T4: Decode<'de, M, A>, T5: Decode<'de, M, A>, T6: Decode<'de, M, A>, T7: Decode<'de, M, A>, T8: Decode<'de, M, A>, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T5: Decode<'de, M, A>, T6: Decode<'de, M, A>, T7: Decode<'de, M, A>, T8: Decode<'de, M, A>, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T6: Decode<'de, M, A>, T7: Decode<'de, M, A>, T8: Decode<'de, M, A>, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T7, T8, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T7, T8, T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T7: Decode<'de, M, A>, T8: Decode<'de, M, A>, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T8, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T8, T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T8: Decode<'de, M, A>, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T9, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T9, T10, T11, T12, T13, T14, T15)
where A: Allocator, T9: Decode<'de, M, A>, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T10, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T10, T11, T12, T13, T14, T15)
where A: Allocator, T10: Decode<'de, M, A>, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T11, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T11, T12, T13, T14, T15)
where A: Allocator, T11: Decode<'de, M, A>, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T12, T13, T14, T15> DecodePacked<'de, M, A> for (T12, T13, T14, T15)
where A: Allocator, T12: Decode<'de, M, A>, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T13, T14, T15> DecodePacked<'de, M, A> for (T13, T14, T15)
where A: Allocator, T13: Decode<'de, M, A>, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T14, T15> DecodePacked<'de, M, A> for (T14, T15)
where A: Allocator, T14: Decode<'de, M, A>, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T15> DecodePacked<'de, M, A> for (T15,)
where A: Allocator, T15: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Source§

impl<'de, M, A, T, const N: usize> DecodePacked<'de, M, A> for [T; N]
where A: Allocator, T: Decode<'de, M, A>,

Source§

fn decode_packed<D>(decoder: D) -> Result<Self, D::Error>
where D: Decoder<'de, Mode = M, Allocator = A>,

Implementors§