Provides the FieldNamesAsArray
procedural macro.
The macro adds the FIELD_NAMES_AS_ARRAY
constant to the struct the
macro is dervied on.
The FIELD_NAMES_AS_ARRAY
contains the field names of the given
struct.
Note: The macro can only be derived from named structs.
* Usage * Attributes * Container Attributes * Rename all * Visibility * Field Attributes * Skip
You can derive the FieldNamesAsArray
macro like this:
```rust use structfieldnamesasarray::FieldNamesAsArray;
struct Foo { bar: String, baz: String, bat: String, }
asserteq!(Foo::FIELDNAMESASARRAY, ["bar", "baz", "bat"]); ```
The FieldNamesAsArray
macro supports the
field_names_as_array
attribute.
field_names_as_array
can be applied to the container or to a field
with different arguments listed below.
Container attributes are global attributes that change the behavior of the whole field names array, rather than that of a single field.
The rename_all
attribute renames every field of the struct according
to the provided naming convention.
This attribute works exactly like the serde
equivalent.
Supported are these naming conventions:
- lowercase
- UPPERCASE
- PascalCase
- camelCase
- snake_case
- SCREAMING_SNAKE_CASE
- kebab-case
- SCREAMING-KEBAB-CASE
```rust use structfieldnamesasarray::FieldNamesAsArray;
struct Foo { fieldone: String, fieldtwo: String, field_three: String, }
asserteq!( Foo::FIELDNAMESASARRAY, ["FIELD-ONE", "FIELD-TWO", "FIELD-THREE"], ); ```
Note: Same as serde's implementation of rename_all
, it is
assumed that your field names follow the rust naming convention.
Namely, all field names must be given in snake_case
.
If you don't follow this convention, applying rename_all
may result in
unexpected field names.
Per default, FIELD_NAMES_AS_ARRAY
is a private member of the struct.
If you want to change the visibility of FIELD_NAMES_AS_ARRAY
, you can use the
visibility
attribute, providing it with a valid
visibility:
```rust mod foo { use structfieldnamesasarray::FieldNamesAsArray;
#[derive(FieldNamesAsArray)]
#[field_names_as_array(visibility = "pub(super)")]
pub(super) struct Foo {
bar: String,
baz: String,
bat: String,
}
}
asserteq!(foo::Foo::FIELDNAMESASARRAY, ["bar", "baz", "bat"]); ```
Field attributes can be added to the fields of a named struct and change the behavior of a single field.
The skip
attribute removes the field from FIELD_NAMES_AS_ARRAY
.
```rust use structfieldnamesasarray::FieldNamesAsArray;
struct Foo { bar: String, baz: String, #[fieldnamesas_array(skip)] bat: String, }
asserteq!(Foo::FIELDNAMESASARRAY, ["bar", "baz"]); ```