| Crates.io | serde_fields |
| lib.rs | serde_fields |
| version | 0.1.0 |
| created_at | 2025-11-20 19:12:39.355364+00 |
| updated_at | 2025-11-20 19:12:39.355364+00 |
| description | Macro making rendered serde field-names available as `&'static str` |
| homepage | |
| repository | https://github.com/bruderj15/serde_fields |
| max_upload_size | |
| id | 1942438 |
| size | 28,555 |
A procedural macro to generate field name enums and constants for structs using Serde, respecting #[serde(rename = "...")] and #[serde(rename_all = "...")].
const SERDE_FIELDS: &'static [&'static str] array containing the serialized names of all non-skipped struct fields.{StructName}SerdeField for all non-skipped fields.#[serde(rename = "...")] - matching the field names of the original struct. They're (de)serializable.as_str() -> &'static strDisplay implementationFrom<Enum> and From<&Enum> for &'static strTryFrom<&str> and TryFrom<String> with custom error Invalid{StructName}SerdeFieldFromStr implementationAsRef<str> for ergonomic usage#[serde(skip)] and renaming via #[serde(rename = "...")].#[serde(rename_all = "...")].Add this to your Cargo.toml:
[dependencies]
serde = { version = "1.0", features = ["serde_derive"] }
serde_fields = "0.1"
use serde::{Serialize, Deserialize};
use serde_fields::SerdeField;
#[derive(Serialize, Deserialize, SerdeField)]
#[serde(rename_all = "camelCase")]
struct User {
user_id: u32,
#[serde(rename = "eMail")]
email: String,
foo_bar: String,
}
// Access serialized field names as a slice
assert_eq!(User::SERDE_FIELDS, &["userId", "eMail", "fooBar"]);
// Use the generated enum
let field = UserSerdeField::UserId;
assert_eq!(field.as_str(), "userId");
assert_eq!(field.to_string(), "userId");
// Parse enum from string
let parsed: UserSerdeField = "userId".parse().unwrap();
assert_eq!(parsed, UserSerdeField::UserId);
// Convert enum to string slice
let name: &str = UserSerdeField::Email.into();
assert_eq!(name, "eMail");
// Serialize
let serialized = serde_json::to_string(&UserSerdeField::FooBar).unwrap();
assert_eq!("\"fooBar\"", serialized);