#[serde_const_default]Expand description
Enables const-expression defaults for fields on a named struct.
The macro consumes field attributes using the following forms:
#[const_default = EXPR], which generates aconst fnthat returnsEXPRdirectly.#[const_default_from(EXPR)], which generates a default function that returns::core::convert::From::from(EXPR).
The generated helper functions are wired back into Serde with
#[serde(default = "...")], so the struct should also derive or implement
Serde deserialization in the usual way.
use serde::Deserialize;
use serde_const_default::serde_const_default;
const PORT: u16 = 8080;
#[serde_const_default]
#[derive(Deserialize)]
struct Settings {
#[const_default = PORT]
port: u16,
}
let settings: Settings = serde_json::from_str("{}").unwrap();
assert_eq!(settings.port, 8080);Use const_default_from when the expression’s type needs a From
conversion into the field type:
use serde::Deserialize;
use serde_const_default::serde_const_default;
const DEFAULT_NAME: &str = "guest";
#[serde_const_default]
#[derive(Deserialize)]
struct Settings {
#[const_default_from(DEFAULT_NAME)]
name: String,
}
let settings: Settings = serde_json::from_str("{}").unwrap();
assert_eq!(settings.name, "guest");