byten 0.0.13

A binary codec library for efficient encoding and decoding of data structures
Documentation
use std::ffi::CStr;

use byten::{Decode, DefaultCodec, Encode, EncodeToVec as _, Measure};

#[derive(Debug, DefaultCodec, Encode, Decode, Measure)]
pub struct Person<'encoded> {
    pub first_name: &'encoded CStr,

    pub last_name: &'encoded CStr,

    #[byten($bytes[u16 $be] $utf8)]
    pub address: &'encoded str,

    #[byten($bytes[u32 $uvarbe])]
    pub avatar_image: &'encoded [u8],

    passcode: &'encoded [u8; 4],

    #[byten(.. $utf8)]
    pub extra_data: &'encoded str,
}

fn main() {
    let person = Person {
        first_name: c"Alice",
        last_name: c"Smith",
        address: "123 Main St, Springfield",
        avatar_image: &[0x11, 0x22, 0x33, 0x44, 0x55, 0x66],
        passcode: &[1, 2, 3, 4],
        extra_data: "Some extra information",
    };

    let encoded = person.encode_to_vec().unwrap();
    println!("Encoded Person: {:?}", encoded);

    let mut offset = 0;
    let decoded_person = Person::decode(&encoded, &mut offset).unwrap();
    println!("Decoded Person: {:?}", decoded_person);
}