5 releases (3 breaking)

0.9.0 Mar 18, 2023
0.4.2 Mar 17, 2019
0.4.0 Mar 17, 2019
0.2.0 Mar 2, 2019
0.1.0 Mar 2, 2019

#19 in #u16

Download history 78/week @ 2024-07-04 102/week @ 2024-07-11 58/week @ 2024-07-18 166/week @ 2024-07-25 188/week @ 2024-08-01 166/week @ 2024-08-08 72/week @ 2024-08-15 105/week @ 2024-08-22 123/week @ 2024-08-29 72/week @ 2024-09-05 79/week @ 2024-09-12 82/week @ 2024-09-19 54/week @ 2024-09-26 28/week @ 2024-10-03 19/week @ 2024-10-10 10/week @ 2024-10-17

124 downloads per month
Used in 2 crates (via byte_struct)

MIT/Apache

12KB
127 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

~235–680KB
~16K SLoC