1 个不稳定版本
0.1.0 | 2023年3月19日 |
---|
#1364 在 过程宏
每月45次下载
15KB
242 行
Nestruct:Rust库,用于展平和嵌套结构体
Nestruct是一个Rust库,提供宏以轻松地在您的代码中展平或嵌套结构体和枚举。它可以帮助简化复杂数据结构的表示,例如Web API响应类型。Nestruct允许您编写简洁的代码,并自动生成等效的标准Rust结构体和枚举。
功能
nestruct::flatten!
:将嵌套的结构体和枚举展平到单个命名空间。nestruct::nest!
:将展平的结构体和枚举嵌套到它们的原始层次结构中。
示例
使用flatten!
宏,您可以转换以下嵌套结构
mod foo_bar {
nestruct::flatten! {
FooBar {
/// foo
foo: String?,
/// bar
bar: [[usize]?]?,
baz: {
qux: [{
quux: (usize, usize)?,
quuz: String?,
}],
corge: String,
},
grault: {
garply,
waldo { wubble: String },
wubble(usize?, usize?)
}?,
}
}
}
为以下展平结构
mod foo_bar {
pub struct Qux {
pub quux: Option<(usize, usize)>,
pub quuz: Option<String>,
}
pub struct Baz {
pub qux: Vec<Qux>,
pub corge: String,
}
pub enum Grault {
Garply,
Waldo { wubble: String },
Wubble(Option<usize>, Option<usize>),
}
pub struct FooBar {
/// foo
pub foo: Option<String>,
/// bar
pub bar: Option<Vec<Option<Vec<usize>>>>,
pub baz: Baz,
pub grault: Option<Grault>,
}
}
同样,使用nest!
宏,您可以嵌套如下的展平结构
nestruct::nest! {
FooBar {
/// foo
foo: String?,
/// bar
bar: [[usize]?]?,
baz: {
qux: [{
quux: (usize, usize)?,
quuz: String?,
}],
corge: String,
},
grault: {
garply,
waldo { wubble: String },
wubble(usize?, usize?)
}?,
}
}
为以下嵌套结构
pub mod foo_bar {
pub mod baz {
pub mod qux {
pub struct Qux {
pub quux: Option<(usize, usize)>,
pub quuz: Option<String>,
}
}
pub struct Baz {
pub qux: Vec<qux::Qux>,
pub corge: String,
}
}
pub mod grault {
pub enum Grault {
Garply,
Waldo { wubble: String },
Wubble(Option<usize>, Option<usize>),
}
}
pub struct FooBar {
/// foo
pub foo: Option<String>,
/// bar
pub bar: Option<Vec<Option<Vec<usize>>>>,
pub baz: baz::Baz,
pub grault: Option<grault::Grault>,
}
}
安装
将以下依赖项添加到您的Cargo.toml中
[dependencies]
nestruct = "0.1.0"
许可证
Nestruct采用MIT许可证。有关更多信息,请参阅LICENSE文件。
依赖项
~2MB
~44K SLoC