3个不稳定版本
0.2.1 | 2021年7月5日 |
---|---|
0.2.0 | 2021年6月29日 |
0.1.0 | 2021年6月8日 |
#13 in #variant-name
96 每月下载次数
在 struct_field 中使用
9KB
130 行
struct_field_names
提供 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