Skip to content

wishawa/struct_field_names

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

struct_field_names

crates.io

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.

Usage

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages