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§
Sourcefn encoded_size(&self) -> Result<usize, EncodingError>
fn encoded_size(&self) -> Result<usize, EncodingError>
The size in bytes required to encode self.
Provided Methods§
Sourcefn to_encoded_bytes(&self) -> Result<Box<[u8]>, EncodingError>
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)?;Sourcefn create_buffer(&self) -> Result<Box<[u8]>, EncodingError>
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()?];Sourcefn encode_with_len<'a>(
&self,
buffer: &'a mut [u8],
) -> Result<(&'a mut [u8], usize), EncodingError>
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.
Sourcefn decode_with_len(
buffer: &[u8],
) -> Result<(Decode, &[u8], usize), EncodingError>where
Decode: Sized,
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
impl CompactEncoding for u8
Source§impl CompactEncoding for u16
impl CompactEncoding for u16
Source§impl CompactEncoding for u32
impl CompactEncoding for u32
Source§impl CompactEncoding for u64
impl CompactEncoding for u64
Source§impl CompactEncoding for usize
impl CompactEncoding for usize
Source§impl CompactEncoding for String
impl CompactEncoding for String
Source§impl CompactEncoding for Vec<u8>
impl CompactEncoding for Vec<u8>
Source§impl CompactEncoding for Vec<String>
impl CompactEncoding for Vec<String>
Source§impl CompactEncoding for Ipv4Addr
impl CompactEncoding for Ipv4Addr
Source§impl CompactEncoding for Ipv6Addr
impl CompactEncoding for Ipv6Addr
Source§fn encode<'a>(
&self,
buffer: &'a mut [u8],
) -> Result<&'a mut [u8], EncodingError>
fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>
let addr: Ipv6Addr = "1:2:3::1".parse()?;
let buff = addr.to_encoded_bytes()?.to_vec();
assert_eq!(buff, vec![0, 1, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);fn encoded_size(&self) -> Result<usize, EncodingError>
fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>where
Self: Sized,
Source§impl CompactEncoding for SocketAddrV4
impl CompactEncoding for SocketAddrV4
Source§fn encode<'a>(
&self,
buffer: &'a mut [u8],
) -> Result<&'a mut [u8], EncodingError>
fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>
let addr: SocketAddrV4 = "127.0.0.1:42".parse()?;
let buff = addr.to_encoded_bytes()?.to_vec();
assert_eq!(buff, vec![127, 0, 0, 1, 42, 0]);fn encoded_size(&self) -> Result<usize, EncodingError>
fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>where
Self: Sized,
Source§impl CompactEncoding for SocketAddrV6
impl CompactEncoding for SocketAddrV6
Source§fn encode<'a>(
&self,
buffer: &'a mut [u8],
) -> Result<&'a mut [u8], EncodingError>
fn encode<'a>( &self, buffer: &'a mut [u8], ) -> Result<&'a mut [u8], EncodingError>
let addr: SocketAddrV6 = "[1:2:3::1]:80".parse()?;
let buff = addr.to_encoded_bytes()?.to_vec();
assert_eq!(buff, vec![0, 1, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0]);