Expand description
§serde-inline-default

A tiny crate to set default values for serde struct fields via inline attribute declaration.
§Overview
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!.
§Alternatives
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
}
}
}§License
This project is licensed under either of the following licenses, at your option:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
Attribute Macros§
- serde_
inline_ default - The main macro of this crate.
Use it to define default values of fields in structs you
SerializeorDeserialize. You do not need to create an extra function to provide the default value, as it is the case in serdes’ implementation of default (#[serde(default = "...")]).