1个不稳定版本

0.1.1 2024年3月12日
0.1.0 2024年2月12日

#445 in #structure

每月下载 23
用于 datastruct

MIT/Apache

69KB
1.5K SLoC

DataStruct.rs

这是一个用于自动生成纯数据结构重复代码的过程宏库。

这个库能做什么?

库提供了一个derive宏来自动为数据结构实现“常规方法”。

当前可用

  • 默认:标准 Default,库特定 DataStruct::data_default 和常量默认 ConstDataStruct::DEFAULT
  • 调试:手动 Debug 过滤。
  • 比较:标准 EqPartialEqOrdPartialOrd
  • 操作:标准 Add(Assign)Sub(Assign)Mul(Assign)Div(Assign)

与标准derive宏不同,DataStruct宏接受用户定义的行为,无需编写实现代码。

快速入门

对于完整文档,请在此处阅读这里

让我们从这个示例结构开始

struct Person {
    age: u8,
    name: String,
    private_key: u32,
}

首先,将 datastruct 添加到你的依赖项中。库的核心入口点是 DataStruct 宏。

use datastruct::DataStruct;
#[derive(DataStruct)]
#[dstruct(debug)]
struct Person {
    age: u8,
    name: String,
    #[dfield(no_debug)]
    private_key: u32,
}

#[dstruct(xxx)] 用于配置代码生成器的基本选项。在这个例子中,debug 表示将实现 Debug 特性。

代码生成器使用#[dfield(xxx)]来配置字段特定的选项。在这个例子中,no_debug表示这个字段将不会包含在调试输出中。

use datastruct::DataStruct;
#[derive(DataStruct)]
#[dstruct(debug)]
struct Person {
    age: u8,
    name: String,
    #[dfield(no_debug)]
    private_key: u32,
}

let person = Person { age: 22, name: "James".to_string(), private_key: 42 };
println!("{:#?}", person);
// Output:
// Person {
//     age: 22,
//     name: "James",
// }

局限性

目前,该库只能生成典型结构的代码,不支持元组结构。

此外,与手动实现相比,大多数IDE支持无法为宏生成的代码提供完整的补全。

依赖关系

约2MB
约44K SLoC