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

#27 in #u16

Download history 154/week @ 2023-11-27 66/week @ 2023-12-04 46/week @ 2023-12-11 98/week @ 2023-12-18 38/week @ 2023-12-25 129/week @ 2024-01-01 59/week @ 2024-01-08 100/week @ 2024-01-15 143/week @ 2024-01-22 61/week @ 2024-01-29 97/week @ 2024-02-05 69/week @ 2024-02-12 67/week @ 2024-02-19 133/week @ 2024-02-26 75/week @ 2024-03-04 91/week @ 2024-03-11

377 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

~320–770KB
~18K SLoC