#serialization #bit-fields #struct #pack-unpack #bitfields

byte_struct

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

13 releases (8 breaking)

0.9.0 Mar 18, 2023
0.8.0 Jul 21, 2022
0.7.1 Aug 21, 2021
0.6.1 Mar 2, 2021
0.4.2 Mar 17, 2019

#992 in Encoding

Download history 1/week @ 2024-11-20 3/week @ 2024-11-27 4/week @ 2024-12-04 23/week @ 2024-12-11 7/week @ 2024-12-18 17/week @ 2024-12-25 14/week @ 2025-01-01 3/week @ 2025-01-15 23/week @ 2025-01-22 111/week @ 2025-01-29 111/week @ 2025-02-05 34/week @ 2025-02-12 17/week @ 2025-02-19 45/week @ 2025-02-26 7/week @ 2025-03-05

105 downloads per month
Used in 3 crates (2 directly)

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

~180–600KB
~14K SLoC