Declarative binary reading and writing
This crate provides bit-level, symmetric, serialization/deserialization implementations for structs and enums
Productivity: Deku will generate symmetric reader/writer functions for your type! Avoid the requirement of writing redundant, error-prone parsing and writing code for binary structs or network headers
Compiler support: requires rustc 1.81+
[dependencies]
deku = "0.19"no_std:
[dependencies]
deku = { version = "0.19", default-features = false, features = ["alloc"] }See documentation or examples folder for more!
Read big-endian data into a struct, modify a value, and write it
use deku::prelude::*;#[derive(Debug,PartialEq,DekuRead,DekuWrite)]#[deku(endian = "big")]structDekuTest{#[deku(bits = 4)]field_a:u8,#[deku(bits = 4)]field_b:u8,field_c:u16,}fnmain(){let data:Vec<u8> = vec![0b0110_1001,0xBE,0xEF];let(_rest,mut val) = DekuTest::from_bytes((data.as_ref(),0)).unwrap();assert_eq!(DekuTest{
field_a:0b0110,
field_b:0b1001,
field_c:0xBEEF,}, val);
val.field_c = 0xC0FE;let data_out = val.to_bytes().unwrap();assert_eq!(vec![0b0110_1001,0xC0,0xFE], data_out);}See CHANGELOG.md