#struct #bitfield #serialization

byte_struct

Pack and unpack structure as raw bytes with packed or bit field layout

12 releases (7 breaking)

0.8.0 Jul 21, 2022
0.7.1 Aug 21, 2021
0.6.1 Mar 2, 2021
0.6.0 Aug 24, 2019
0.4.2 Mar 17, 2019

#249 in Encoding

Download history 19/week @ 2022-10-17 37/week @ 2022-10-24 112/week @ 2022-10-31 120/week @ 2022-11-07 187/week @ 2022-11-14 146/week @ 2022-11-21 287/week @ 2022-11-28 158/week @ 2022-12-05 106/week @ 2022-12-12 57/week @ 2022-12-19 32/week @ 2022-12-26 241/week @ 2023-01-02 406/week @ 2023-01-09 128/week @ 2023-01-16 403/week @ 2023-01-23 219/week @ 2023-01-30

1,156 downloads per month
Used in catnip

MIT/Apache

24KB
357 lines

Byte Struct

Pack and unpack structure as raw bytes with packed or bit field layout.

Example

use byte_struct::*;

bitfields!(
    #[derive(PartialEq, Debug)]
    GIFColorTableInfo: u8 {
        global_color_table_flag: 1,
        color_resolution: 3,
        sort_flag: 1,
        global_color_table_size: 3,
    }
);

#[derive(ByteStruct, PartialEq, Debug)]
#[byte_struct_le]
struct GIFLogicalScreenDescriptor {
    width: u16,
    height: u16,
    color_table_info: GIFColorTableInfo,
    background_color_index: u8,
    pixel_aspect_ratio: u8,
}

fn example() {
    assert_eq!(GIFLogicalScreenDescriptor::BYTE_LEN, 7);
    let raw_descriptor = [0x03, 0x00, 0x05, 0x00, 0xF7, 0x00, 0x00];
    let descriptor = GIFLogicalScreenDescriptor::read_bytes(&raw_descriptor[..]);
    assert_eq!(descriptor, GIFLogicalScreenDescriptor{
        width: 3,
        height: 5,
        color_table_info: GIFColorTableInfo {
            global_color_table_flag: 1,
            color_resolution: 3,
            sort_flag: 1,
            global_color_table_size: 7,
        },
        background_color_index: 0,
        pixel_aspect_ratio: 0,
    });
    let mut raw_another = [0; GIFLogicalScreenDescriptor::BYTE_LEN];
    descriptor.write_bytes(&mut raw_another[..]);
    assert_eq!(raw_descriptor, raw_another);
}

License

Licensed under either of

at your option.

Dependencies

~1.5MB
~43K SLoC