Trait CompactEncoding

Source
pub trait CompactEncoding<Decode: ?Sized = Self> {
    // Required methods
    fn encoded_size(&self) -> Result<usize, EncodingError>;
    fn encode<'a>(
        &self,
        buffer: &'a mut [u8],
    ) -> Result<&'a mut [u8], EncodingError>;
    fn decode(buffer: &[u8]) -> Result<(Decode, &[u8]), EncodingError>
       where Decode: Sized;

    // Provided methods
    fn to_encoded_bytes(&self) -> Result<Box<[u8]>, EncodingError> { ... }
    fn create_buffer(&self) -> Result<Box<[u8]>, EncodingError> { ... }
    fn encode_with_len<'a>(
        &self,
        buffer: &'a mut [u8],
    ) -> Result<(&'a mut [u8], usize), EncodingError> { ... }
    fn decode_with_len(
        buffer: &[u8],
    ) -> Result<(Decode, &[u8], usize), EncodingError>
       where Decode: Sized { ... }
}
Expand description

A trait for building small and fast parsers and serializers.

Required Methods§

Source

fn encoded_size(&self) -> Result<usize, EncodingError>

The size in bytes required to encode self.

Source

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Encode self into buffer returning the remainder of buffer.

Source

fn decode(buffer: &[u8]) -> Result<(Decode, &[u8]), EncodingError>
where Decode: Sized,

Decode a value from the given buffer of the type specified by the Decode type parameter (which defaults to Self). Returns the decoded value and remaining undecoded bytes.

Provided Methods§

Source

fn to_encoded_bytes(&self) -> Result<Box<[u8]>, EncodingError>

Encode self into a Vec<u8>. This is just a helper method for creating a buffer and encoding to it in one step.

let foo: Ipv4Addr = "0.0.0.0".parse()?;
let mut buff = vec![0; foo.encoded_size()?];
foo.encode(&mut buff)?;
Source

fn create_buffer(&self) -> Result<Box<[u8]>, EncodingError>

Create an empty buffer of the correct size for encoding self to. This is just a helper method for: encoding to it in one step.

let foo: Ipv4Addr = "0.0.0.0".parse()?;
vec![0; foo.encoded_size()?];
Source

fn encode_with_len<'a>( &self, buffer: &'a mut [u8], ) -> Result<(&'a mut [u8], usize), EncodingError>

Like CompactEncoding::encode but also return the number of bytes encoded.

Source

fn decode_with_len( buffer: &[u8], ) -> Result<(Decode, &[u8], usize), EncodingError>
where Decode: Sized,

Like CompactEncoding::decode but also return the number of bytes decoded.

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 CompactEncoding for u8

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl CompactEncoding for u16

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl CompactEncoding for u32

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl CompactEncoding for u64

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl CompactEncoding for String

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl CompactEncoding for Vec<u8>

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl CompactEncoding for Vec<String>

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl CompactEncoding for Ipv4Addr

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl CompactEncoding for Ipv6Addr

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl CompactEncoding<String> for str

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(String, &[u8]), EncodingError>

Source§

impl<T: BoxedSliceEncodable> CompactEncoding for Box<[T]>

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl<T: VecEncodable> CompactEncoding for Vec<T>

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Source§

impl<const N: usize> CompactEncoding for [u8; N]

Source§

fn encoded_size(&self) -> Result<usize, EncodingError>

Source§

fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>

Source§

fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
where Self: Sized,

Implementors§