Skip to main content

BytesCodec

Trait BytesCodec 

Source
pub trait BytesCodec: Sized {
    // Required methods
    fn encode_bytes(&self) -> Vec<u8>;
    fn decode_bytes(bytes: &[u8]) -> Result<Self>;
}
Expand description

Trait for types that can be encoded/decoded to/from variable-length bytes.

This trait is used for complex types, strings, and data that doesn’t fit in 32 bytes. All encoding uses little-endian format for integers.

§Derivable

Use #[derive(BytesCodec)] for automatic implementation:

#[derive(BytesCodec)]
struct User {
    name: String,
    age: u32,
    active: bool,
}

§Example

let data = vec![1, 2, 3, 4];
let bytes = data.encode_bytes();
let decoded = Vec::<u8>::decode_bytes(&bytes)?;
assert_eq!(decoded, data);

Required Methods§

Source

fn encode_bytes(&self) -> Vec<u8>

Encodes the value into a byte vector.

Source

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Decodes a value from a byte slice.

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 BytesCodec for bool

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for i8

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for i16

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for i32

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for i64

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for i128

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for u8

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for u16

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for u32

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for u64

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for u128

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl BytesCodec for String

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

impl<T: BytesCodec> BytesCodec for Option<T>

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Source§

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

Source§

fn encode_bytes(&self) -> Vec<u8>

Source§

fn decode_bytes(bytes: &[u8]) -> Result<Self>

Implementors§