Crate serde_inline_default

Crate serde_inline_default 

Source
Expand description

§serde-inline-default ci crates.io crates.io downloads docs

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:

Attribute Macros§

serde_inline_default
The main macro of this crate. Use it to define default values of fields in structs you Serialize or Deserialize. 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 = "...")]).