7 个版本
0.3.0 | 2023 年 10 月 10 日 |
---|---|
0.2.0 | 2023 年 4 月 27 日 |
0.1.4 | 2022 年 11 月 15 日 |
0.1.3 | 2022 年 1 月 19 日 |
0.1.2 | 2021 年 10 月 12 日 |
#359 在 Rust 模式
6,067 每月下载量
在 5 个工具包中使用 (4 个直接使用)
9KB
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 等效。支持的命名约定包括
lowercase
UPPERCASE
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"]);
依赖关系
~115KB