#byte-array #byte #serialization #binary-data #unpack #struct #parse

cursieve

Cursieve 是一个 Rust 库,它使得将字节数组反序列化为带注释的 Rust 结构体变得简单。

1 个不稳定版本

0.1.0 2024 年 1 月 2 日

#1655数据结构

自定义许可

11KB
122

Cursieve

🚧🔨 正在建设中 🔨🚧

Cursieve 是一个 Rust 库,它使得将字节数组反序列化为带注释的 Rust 结构体变得简单。

Cursieve 生成适当的读取和写入方法,使用 std::io::Cursor 来打包和解包您的自定义 Rust 类型。此库在您有现有的字节数据并希望从中提取非连续信息或将信息放入可以自由轻松修改的 Rust 结构体时非常有用,这些结构体随后可以重新序列化,而其他字节保持不变。

功能

生成 siftdisperse 函数,允许您从现有的字节数据生成结构,或将现有结构反序列化到给定的字节数组中。

  • 使用 std::io::Cursorbyteorder 实现,支持大小端
  • 轻松序列化原语和其他 Cursieve 衍生类型;使用 try_from 支持选择其他字段
  • 仅在需要时进行注释;Cursieve 自动计算结构体的大小和序列化所需的偏移量;对于非连续读取,只需注释每个连续区域的起始即可

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
cursieve = "0.1.0"

然后,在您的 crate 中

use cursieve::Sieve;

#[derive(Sieve)]
struct MyStruct {
    #[sieve(offset(0x8A))]
    my_var: i32,
    // ...
}

示例

以下是如何使用 Cursieve 的一个简单示例

#[derive(Debug, Sieve)]
pub struct MyStruct {
    #[sieve(offset(0x12), count(7))]
    name: Vec<u8>,
    #[sieve(offset(0x80), try_from(u16))]
    ty: TypeSupportingTryFromPrimitive,
    #[sieve(try_from)]
    garden: Garden,
    happiness: i16,
    init: u8,
    #[sieve(offset(0x8A))]
    lifespan_1: i16,
    lifespan_2: i16,
    #[sieve(order(byteorder::BigEndian))]
    cool_beans: u16,
}


文档

完整的文档将在以后提供。

安装

您可以通过将以下内容添加到您的 Cargo.toml 来将此库作为依赖项包含在 Rust 项目中

[dependencies]
cursieve = "0.1.0"

贡献

一旦我对此进行了一些组织,贡献将会很棒。

许可

此项目受 MIT 许可证 的许可。

致谢

狗狗们!

依赖项

~0.4–1MB
~21K SLoC