byten 0.0.13

A binary codec library for efficient encoding and decoding of data structures
Documentation
use byten::{Decode, DecodeOwned, DefaultCodec, Encode, EncodeToVec as _, Measure};

#[derive(Debug, DefaultCodec, Encode, Measure, DecodeOwned)]
pub struct IcmpHeader {
    pub icmp_type: u8,
    pub code: u8,
    #[byten($be)]
    pub checksum: u16,
    pub rest_of_header: [u8; 4],
}

#[derive(Debug, DefaultCodec, Encode, Measure, DecodeOwned)]
pub struct IcmpPacket {
    pub header: IcmpHeader,
    #[byten(.. $own)]
    pub data: Vec<u8>,
}

fn main() {
    let header = IcmpHeader {
        icmp_type: 8,
        code: 0,
        checksum: 0x1234,
        rest_of_header: [0, 2, 4, 8],
    };

    let packet = IcmpPacket {
        header,
        data: b"Hello, ICMP!".to_vec(),
    };

    let encoded = packet.encode_to_vec().unwrap();
    println!("Encoded ICMP Packet: {:?}", encoded);

    let decoded = IcmpPacket::decode(&encoded, &mut 0).unwrap();
    println!("Decoded ICMP Packet: {:?}", decoded);
}