#字段名称 #结构体字段 #反射 #内省 #常量 # #数组

struct-field-names-as-array

生成命名结构体字段名称常量的工具包

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 日

#359Rust 模式

Download history 1815/week @ 2024-03-14 1266/week @ 2024-03-21 1893/week @ 2024-03-28 1570/week @ 2024-04-04 1250/week @ 2024-04-11 2086/week @ 2024-04-18 1484/week @ 2024-04-25 1470/week @ 2024-05-02 1298/week @ 2024-05-09 1175/week @ 2024-05-16 1076/week @ 2024-05-23 1217/week @ 2024-05-30 1537/week @ 2024-06-06 1763/week @ 2024-06-13 1421/week @ 2024-06-20 1036/week @ 2024-06-27

6,067 每月下载量
5 个工具包中使用 (4 个直接使用)

MIT 许可证

9KB

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 等效。支持的命名约定包括

  • 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