1个不稳定版本
0.3.0 | 2023年10月10日 |
---|
#42 in #field-name
2,283 每月下载次数
用于 struct-field-names-as-arr…
15KB
240 行
struct-field-names-as-array
提供 FieldNamesAsArray
和 FieldNamesAsSlice
特性以及用于推导它们的进程宏。这些特性包含关联常量(FieldNamesAsArray::FIELD_NAMES_AS_ARRAY
和 FieldNamesAsSlice::FIELD_NAMES_AS_SLICE
),列出结构体的字段名称。
注意:这些宏只能从命名结构体中推导。
目录
使用方法
您可以使用以下方式推导 FieldNamesAsArray
和 FieldNamesAsSlice
宏
use 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"]);
use struct_field_names_as_array::FieldNamesAsSlice;
#[derive(FieldNamesAsSlice)]
struct Foo {
bar: String,
baz: String,
bat: String,
}
assert_eq!(Foo::FIELD_NAMES_AS_SLICE, ["bar", "baz", "bat"]);
属性
FieldNamesAsArray
宏附带 field_names_as_array
属性。正交地,FieldNamesAsSlice
支持具有相同参数的 field_names_as_slice
属性。参数如下。
容器属性
容器属性是全局属性,它改变整个字段名称集合的行为,而不是单个字段的行为。
重命名所有
rename_all
属性根据提供的命名约定重命名结构体中的每个字段。此属性与 serde 的等效功能完全相同。支持以下命名约定
小写
大写
PascalCase
camelCase
snake_case
SCREAMING_SNAKE_CASE
kebab-case
SCREAMING-KEBAB-CASE
use struct_field_names_as_array::FieldNamesAsArray;
#[derive(FieldNamesAsArray)]
#[field_names_as_array(rename_all = "SCREAMING-KEBAB-CASE")]
struct Foo {
field_one: String,
field_two: String,
field_three: String,
}
assert_eq!(
Foo::FIELD_NAMES_AS_ARRAY,
["FIELD-ONE", "FIELD-TWO", "FIELD-THREE"],
);
注意:与serde的rename_all
实现相同,假设您的字段名称遵循Rust命名约定。也就是说,所有字段名称都必须以snake_case
形式给出。如果不遵循此约定,应用rename_all
可能会导致意外的字段名称。
字段属性
字段属性可以添加到命名结构的字段中,并改变单个字段的操作行为。
跳过
skip
属性将字段从生成的常量中删除。
use struct_field_names_as_array::FieldNamesAsSlice;
#[derive(FieldNamesAsSlice)]
struct Foo {
bar: String,
baz: String,
#[field_names_as_slice(skip)]
bat: String,
}
assert_eq!(Foo::FIELD_NAMES_AS_SLICE, ["bar", "baz"]);
依赖项
~250–700KB
~17K SLoC