pamoja-codec 0.1.0

Serialization and framing for pamoja: pluggable wire formats behind a common Codec trait.
Documentation
pamoja-codec-0.1.0 has been yanked.

Pluggable serialization for pamoja payloads.

Concrete wire formats - CBOR for constrained devices, Protocol Buffers, JSON, or raw framing - implement the [Codec] trait. This crate defines the trait; the format implementations are provided by the capability crates.

Examples

A little-endian codec for u32 values:

use pamoja_codec::Codec;
use pamoja_core::{Error, Result};

struct LeU32;

impl Codec<u32> for LeU32 {
    fn encode(&self, value: &u32) -> Result<Vec<u8>> {
        Ok(value.to_le_bytes().to_vec())
    }

    fn decode(&self, bytes: &[u8]) -> Result<u32> {
        let array = bytes
            .try_into()
            .map_err(|_| Error::Codec("expected 4 bytes".into()))?;
        Ok(u32::from_le_bytes(array))
    }
}

let codec = LeU32;
let encoded = codec.encode(&42).unwrap();
assert_eq!(codec.decode(&encoded).unwrap(), 42);