#struct-fields #field-name #name #field #struct #variant-name

struct_field_names

为在结构体中生成每个字段的名称和在枚举中生成每个变体的名称的宏,以 &'static str 的形式

3个不稳定版本

0.2.1 2021年7月5日
0.2.0 2021年6月29日
0.1.0 2021年6月8日

#13 in #variant-name

Download history 24/week @ 2024-03-28 14/week @ 2024-04-04 4/week @ 2024-04-11 2/week @ 2024-05-23 14/week @ 2024-06-06 78/week @ 2024-06-13 4/week @ 2024-06-20

96 每月下载次数
struct_field 中使用

MIT 许可证

9KB
130

struct_field_names

crates.io

提供 StructFieldNames derive 宏。

#[derive(StructFieldNames)]
struct SomeStruct {
    field_one: i32,
    field_two: Vec<bool>,
}

生成

struct SomeStructFieldStaticStr {
    field_one: &'static str,
    field_two: &'static str,
}
impl SomeStruct {
    const FIELD_NAMES: SomeStructFieldStaticStr = SomeStructFieldStaticStr {
        field_one: "field_one",
        field_two: "field_two",
    };
}

可用于如下

let field_one_name: &'static str = SomeStruct::FIELD_NAMES.field_one;
println!("{}", field_one_name);

.

这主要用于防止拼写错误。

归功于 field_types crate。这里的大量代码是从那里复制的。

用法

像这样使用 StructFieldNames derive 宏

#[derive(StructFieldNames)]
struct SomeStruct {
    field_one: i32,
    field_two: Vec<bool>,
}

然后像这样访问字段名称 &'static str

let field_one_name: &'static str = SomeStruct::FIELD_NAMES.field_one;

使用 #[struct_field_names)] 跳过字段。没有

#[derive(StructFieldNames)]
struct Struct {
	field_one: bool,
	#[struct_field_names(skip)]
	field_two: usize,
}

SomeStruct::FIELD_NAMES.field_two 将不存在。

字段名称结构的可见性遵循你的结构。

只有

#[derive(StructFieldNames)]
pub struct PublicStruct {
	pub public_field: i32,
	private_field: i32
}
#[derive(StructFieldNames)]
struct PrivateStruct {
	pub public_field: i32,
	private_field: i32
}

PublicStruct::FIELD_NAMES.public_field 将对外部世界可用。

依赖关系

~1.5MB
~35K SLoC