| Crates.io | struct_field_names |
| lib.rs | struct_field_names |
| version | 0.2.1 |
| created_at | 2021-06-08 08:23:29.216718+00 |
| updated_at | 2021-07-05 16:14:26.481153+00 |
| description | Derive macros for generating the name of each field in a struct and each variant name in an enum as `&'static str` |
| homepage | |
| repository | https://github.com/wishawa/struct_field_names |
| max_upload_size | |
| id | 407669 |
| size | 10,630 |
Provides StructFieldNames derive macro.
#[derive(StructFieldNames)]
struct SomeStruct {
field_one: i32,
field_two: Vec<bool>,
}
generates
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",
};
}
which can be used like
let field_one_name: &'static str = SomeStruct::FIELD_NAMES.field_one;
println!("{}", field_one_name);
.
This is useful mostly for typo-proofing.
Credits to the field_types crate. A lot of code here is copied from there.
Use the StructFieldNames derive macro like this:
#[derive(StructFieldNames)]
struct SomeStruct {
field_one: i32,
field_two: Vec<bool>,
}
then access the field name as &'static str like this:
let field_one_name: &'static str = SomeStruct::FIELD_NAMES.field_one;
Use #[struct_field_names(skip)] to skip fields.
With
#[derive(StructFieldNames)]
struct Struct {
field_one: bool,
#[struct_field_names(skip)]
field_two: usize,
}
SomeStruct::FIELD_NAMES.field_two won't exist.
Visibility of the field names struct follows your struct.
With
#[derive(StructFieldNames)]
pub struct PublicStruct {
pub public_field: i32,
private_field: i32
}
#[derive(StructFieldNames)]
struct PrivateStruct {
pub public_field: i32,
private_field: i32
}
only PublicStruct::FIELD_NAMES.public_field would be available to the outside world.