1 个不稳定版本
| 0.1.1 | 2024 年 3 月 12 日 |
|---|---|
| 0.1.0 |
|
#830 在 数据结构
每月 51 次下载
31KB
164 行
DataStruct.rs
这是一个过程宏库,可以自动生成纯数据结构的重复代码。
这个库能做什么?
该库提供 derive 宏来自动为数据结构实现“普通方法”。
目前可用
- 默认:标准
Default、库特定DataStruct::data_default和常量默认ConstDataStruct::DEFAULT。 - 调试:手动
Debug过滤器。 - 比较:标准
Eq、PartialEq、Ord、PartialOrd。 - 操作:标准
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