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

cursieve_derive

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

1 个不稳定版本

0.1.0 2024 年 1 月 2 日

#25 in #unpack


用于 cursieve

自定义许可

34KB
706

Cursieve

🚧🔨 施工中 🔨🚧

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

Curseive 生成适当的读取和写入方法,以使用 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 许可 的许可。

致谢

狗狗们!

依赖

~275–730KB
~17K SLoC