1个不稳定版本
0.1.1 | 2024年3月12日 |
---|---|
0.1.0 |
|
#445 in #structure
每月下载 23 次
用于 datastruct
69KB
1.5K SLoC
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