27个版本

0.17.0 2024年5月23日
0.16.0 2023年2月28日
0.15.1 2022年12月19日
0.15.0 2022年11月16日
0.1.2 2020年3月30日

#127编码

Download history 6935/week @ 2024-05-03 6616/week @ 2024-05-10 6157/week @ 2024-05-17 5639/week @ 2024-05-24 6781/week @ 2024-05-31 5721/week @ 2024-06-07 6496/week @ 2024-06-14 7425/week @ 2024-06-21 8059/week @ 2024-06-28 7288/week @ 2024-07-05 8354/week @ 2024-07-12 8634/week @ 2024-07-19 8079/week @ 2024-07-26 8707/week @ 2024-08-02 10078/week @ 2024-08-09 7235/week @ 2024-08-16

35,701 每月下载量
用于 44 个crate(31个直接使用)

MIT/Apache

190KB
3K SLoC

Deku

Latest Version Rust Documentation Actions Status codecov

声明性二进制读写

此crate为结构体和枚举提供了位级别的对称序列化/反序列化实现

为什么使用Deku

生产力:Deku将为您的类型生成对称的读写函数!避免编写冗余、容易出错的解析和写入代码,用于二进制结构体或网络头

使用方法

编译器支持:需要rustc 1.71+

[dependencies]
deku = "0.17"

no_std

[dependencies]
deku = { version = "0.17", default-features = false, features = ["alloc"] }

示例

请参阅文档示例文件夹以获取更多信息!

将大端数据读入结构体,修改一个值,然后写入

use deku::prelude::*;

#[derive(Debug, PartialEq, DekuRead, DekuWrite)]
#[deku(endian = "big")]
struct DekuTest {
    #[deku(bits = 4)]
    field_a: u8,
    #[deku(bits = 4)]
    field_b: u8,
    field_c: u16,
}

fn main() {
    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);
}

变更日志

请参阅CHANGELOG.md

依赖项

~1.7–2.6MB
~56K SLoC