#field-name #struct-fields #proc-macro #macro #array #procedural #attributes

struct-field-names-as-array-derive

为 struct-field-names-as-array crate 提供过程宏

1个不稳定版本

0.3.0 2023年10月10日

#42 in #field-name

Download history 718/week @ 2024-03-14 393/week @ 2024-03-21 526/week @ 2024-03-28 670/week @ 2024-04-04 465/week @ 2024-04-11 490/week @ 2024-04-18 652/week @ 2024-04-25 573/week @ 2024-05-02 271/week @ 2024-05-09 302/week @ 2024-05-16 387/week @ 2024-05-23 553/week @ 2024-05-30 667/week @ 2024-06-06 506/week @ 2024-06-13 583/week @ 2024-06-20 361/week @ 2024-06-27

2,283 每月下载次数
用于 struct-field-names-as-arr…

MIT 许可证

15KB
240

struct-field-names-as-array

Build Status Codecov Latest Version Downloads Docs License: MIT

提供 FieldNamesAsArrayFieldNamesAsSlice 特性以及用于推导它们的进程宏。这些特性包含关联常量(FieldNamesAsArray::FIELD_NAMES_AS_ARRAYFieldNamesAsSlice::FIELD_NAMES_AS_SLICE),列出结构体的字段名称。

注意:这些宏只能从命名结构体中推导。

目录

使用方法

您可以使用以下方式推导 FieldNamesAsArrayFieldNamesAsSlice

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