Skip to main content

serde_const_default

Attribute Macro serde_const_default 

Source
#[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 a const fn that returns EXPR directly.
  • #[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");