serde_fields
A procedural macro to generate field name enums and constants for structs using Serde, respecting #[serde(rename = "...")] and #[serde(rename_all = "...")].
Features
- Automatically generate a
const SERDE_FIELDS: &'static [&'static str]array containing the serialized names of all non-skipped struct fields. - Generate an enum named
{StructName}SerdeFieldfor all non-skipped fields. - Enum variants match Rust field names (PascalCase) and are annotated with
#[serde(rename = "...")]- matching the field names of the original struct. They're (de)serializable. - Provides convenient methods and trait implementations:
as_str() -> &'static strDisplayimplementationFrom<Enum>andFrom<&Enum>for&'static strTryFrom<&str>andTryFrom<String>with custom errorInvalid{StructName}SerdeFieldFromStrimplementationAsRef<str>for ergonomic usage
- Supports skipped fields via
#[serde(skip)]and renaming via#[serde(rename = "...")]. - Fully respects struct-level
#[serde(rename_all = "...")].
Installation
Add this to your Cargo.toml:
[]
= { = "1.0", = ["serde_derive"] }
= "0.1"
Usage
use ;
use SerdeField;
// Access serialized field names as a slice
assert_eq!;
// Use the generated enum
let field = UserId;
assert_eq!;
assert_eq!;
// Parse enum from string
let parsed: UserSerdeField = "userId".parse.unwrap;
assert_eq!;
// Convert enum to string slice
let name: &str = Email.into;
assert_eq!;
// Serialize
let serialized = to_string.unwrap;
assert_eq!;