1 个不稳定版本
0.1.0 | 2023年2月4日 |
---|
#2864 在 Rust 模式
9KB
127 行
嵌套结构体
是否想过创建一个包含嵌套数据的数据结构?你是否发现自己仅仅为了组合它们而创建了多个单独的结构体?那么,这个库就是为你准备的!
将这个
pub struct MyStruct {
pub data: MyStructData,
}
pub struct MyStructData {
pub data: u32
}
转换成这个
use nested_struct::*;
nested_struct! {
pub struct MyStruct {
pub data: MyStructData {
pub data: u32
}
}
}
基本用法
创建一个新的可能包含嵌套字段的结构体。
use nested_struct::*;
nested_struct! {
pub struct MyStruct {
pub regular_field: u32,
pub nested_field: NestedField {
pub inner_field: bool
}
}
}
let _ = MyStruct {
regular_field: 123,
nested_field: NestedField {
inner_field: true,
},
};
深度嵌套的结构体
嵌套不仅限于单级。你可以生成具有多级嵌套字段的结构体
use nested_struct::*;
nested_struct! {
pub struct MyStruct {
pub nested_field: NestedField {
pub nested_field: DeeperNestedField {
pub inner_field: bool
}
}
}
}
let _ = MyStruct {
nested_field: NestedField {
nested_field: DeeperNestedField {
inner_field: true,
}
},
};
将字段属性应用于嵌套结构体的字段
与普通结构体一样,嵌套字段也可以放置属性
use nested_struct::*;
nested_struct! {
pub struct MyStruct {
pub regular_field: u32,
#[doc = "my nested field"]
pub nested_field: NestedField {
pub inner_field: bool
}
}
}
将结构体级别的属性应用于嵌套结构体
如果你想在生成的嵌套结构体上应用属性,你需要使用 @nested
标记。这可以多次使用,但必须在任何字段特定属性之后出现
use nested_struct::*;
nested_struct! {
pub struct MyStruct {
pub regular_field: u32,
#[doc = "my nested field"]
@nested(#[derive(Clone)])
pub nested_field: NestedField {
pub inner_field: bool
}
}
}
let nested_field = NestedField { inner_field: true };
let _ = MyStruct {
regular_field: 123,
nested_field: nested_field.clone(),
};
许可证
该项目根据您的选择受以下任一许可证的约束:
Apache 许可证第 2 版 (LICENSE-APACHE 或 apache-license) MIT 许可证 (LICENSE-MIT 或 mit-license)