Attribute Macro impl_default

Source
#[impl_default]
Expand description

Impl Default with given field or type initializers

This macro may be used in one of two ways.

NOTE: this macro is already partially obsolete since Rust 1.62 added support for default enum variants. Once RFC 3681 (default field values) is stable in this crate’s MSRV, this macro will be deprecated.

§Type-level initializer

/// A simple enum; default value is Blue
#[impl_default(Colour::Blue)]
enum Colour {
    Red,
    Green,
    Blue,
}

fn main() {
    assert!(matches!(Colour::default(), Colour::Blue));
}

A where clause is optional: #[impl_default(EXPR where BOUNDS)].

§Field-level initializer

This variant only supports structs. Fields specified as name: type = expr will be initialized with expr, while other fields will be initialized with Default::default().

impl_scope! {
    #[impl_default]
    struct Person {
        name: String = "Jane Doe".to_string(),
        age: u32 = 72,
        occupation: String,
    }
}

fn main() {
    let person = Person::default();
    assert_eq!(person.name, "Jane Doe");
    assert_eq!(person.age, 72);
    assert_eq!(person.occupation, "");
}

A where clause is optional: #[impl_default(where BOUNDS)].