| Crates.io | serde-inline-default |
| lib.rs | serde-inline-default |
| version | 1.0.0 |
| created_at | 2023-02-11 14:37:51.447156+00 |
| updated_at | 2025-09-02 12:14:53.102152+00 |
| description | Serde default values via inline declaration |
| homepage | |
| repository | https://github.com/bytedream/serde-inline-default |
| max_upload_size | |
| id | 782545 |
| size | 29,782 |
A tiny crate to set default values for serde struct fields via inline attribute declaration.
This crate is an approach to do what serde-rs/serde#368 purposes: Defining default values for struct fields via inline declaration instead of creating a separate function for it.
So instead of writing something like this, which can get very verbose quickly with many fields:
#[derive(Deserialize)]
struct Test {
#[serde(default = "value_default")]
value: u32
}
fn value_default() -> u32 { 42 }
you can just do this:
#[serde_inline_default]
#[derive(Deserialize)]
struct Test {
#[serde_inline_default(42)]
value: u32
}
[!IMPORTANT]
#[serde_inline_default]must be set before#[derive(Deserialize)]/#[derive(Serialize)]!
Internally, #[serde_inline_default(...)] gets expanded to a function which returns the set value and the attribute is replaced with #[serde(default = "<function name>")].
So this macro is just some syntax sugar for you, but can get quite handy if you want to keep your code clean or write declarative macros / macro_rules!.
This crate isn't perfect. Thus, you might be more satisfied with alternatives serde provides.
With #[serde(default)] + impl Default on a struct, serde uses the default implementation of the struct to get default values for each field (docs):
#[derive(Deserialize)]
#[serde(default)]
struct Test {
value: u32
}
impl Default for Test {
fn default() -> Self {
Self {
value: 42
}
}
}
If you still need/want serde-inline-default features, you also can combine them with #[serde(default)) and impl Default:
#[serde_inline_default]
#[derive(Deserialize)]
#[serde(default)]
struct Test {
value: u32,
#[serde_inline_default(0)]
other_value: u32,
}
impl Default for Test {
fn default() -> Self {
Self {
value: 42,
other_value: 42
}
}
}
This project is licensed under either of the following licenses, at your option: