#[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)]
.