1 个不稳定版本

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

#830数据结构

Download history 14/week @ 2024-03-28 16/week @ 2024-04-04

每月 51 次下载

MIT/Apache

31KB
164

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