1 个不稳定版本
0.1.0 | 2023年3月21日 |
---|
#735 在 过程宏
96,807 每月下载量
8KB
85 行
runtime-struct-field-names-as-array
提供 FieldNamesAsArray
过程宏。该宏将 field_names_as_array()
函数添加到过程宏所派生的结构体中。它包含给定结构体的字段名,包括父结构体的字段名
注意:此宏只能从命名结构体派生。
重要:此crate存在运行时开销,选项有限。如果您不打算在嵌套结构体上使用它,请使用此 crate。请参阅 讨论
目录
用法
您可以通过这种方式派生 FieldNamesAsArray
宏
use runtime_struct_field_names_as_array::FieldNamesAsArray;
#[derive(FieldNamesAsArray)]
struct Foo {
bar: String,
baz: String,
bat: String,
}
assert_eq!(Foo::field_names_as_array(), ["bar", "baz", "bat"]);
属性
FieldNamesAsArray
宏支持 field_names_as_array
属性。 field_names_as_array
可以通过仅添加 flatten
属性应用于字段
容器属性
容器属性是全局属性,它改变整个字段名数组的行为,而不是单个字段的行为。
字段属性
字段属性可以添加到命名结构体的字段中,并改变单个字段的行为。
Flatten
flatten
属性将添加父字段。也支持选项结构体。如果未在结构体类型上添加此属性,则将其视为常规字段。
use runtime_struct_field_names_as_array::FieldNamesAsArray;
#[derive(FieldNamesAsArray)]
struct Parent {
foo: String,
}
#[derive(FieldNamesAsArray)]
struct Foo {
bar: String,
baz: String,
#[field_names_as_array(flatten)]
parent: Parent,
#[field_names_as_array(flatten)]
parent_option: Option<Parent>,
another_parent: Parent,
}
assert_eq!(Foo::field_names_as_array(), ["bar", "baz", "parent.foo", "parent_option.foo", "another_parent"]);
依赖项
~320–790KB
~19K SLoC