Skip to main content

Codec

Trait Codec 

Source
pub trait Codec<T> {
    type Error;

    // Required methods
    fn encode(value: &T) -> Result<Vec<u8>, Self::Error>;
    fn decode(value: &[u8]) -> Result<T, Self::Error>;
}
Expand description

Optional conversion between application values and KV bytes.

Maps never apply a codec implicitly. The encoding is part of the application’s ledger format.

use ccf_app::Codec;

struct BigEndianU32;

impl Codec<u32> for BigEndianU32 {
    type Error = std::array::TryFromSliceError;

    fn encode(value: &u32) -> Result<Vec<u8>, Self::Error> {
        Ok(value.to_be_bytes().to_vec())
    }

    fn decode(bytes: &[u8]) -> Result<u32, Self::Error> {
        Ok(u32::from_be_bytes(bytes.try_into()?))
    }
}

let bytes = BigEndianU32::encode(&42).unwrap();
assert_eq!(BigEndianU32::decode(&bytes).unwrap(), 42);
assert!(BigEndianU32::decode(&[42]).is_err());

Required Associated Types§

Source

type Error

Encoding or decoding error.

Required Methods§

Source

fn encode(value: &T) -> Result<Vec<u8>, Self::Error>

Encode a value as bytes.

Source

fn decode(value: &[u8]) -> Result<T, Self::Error>

Decode a value from 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.

Implementors§