pub trait DecodePacked<'de, M, A>: Sizedwhere
A: Allocator,{
// Required method
fn decode_packed<D>(decoder: D) -> Result<Self, <D as Decoder<'de>>::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§
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.