auto-default 0.1.3

Macro that adds a default field value of `Default::default()` to fields that don't have one
Documentation

auto-default

crates.io docs.rs license msrv github

This crate provides an attribute macro #[auto_default], which adds a default field value of Default::default() to fields that do not have one.

[dependencies]
auto-default = "0.1"

Note: auto-default has zero dependencies. Not even syn! The compile times are very fast.

Showcase

Rust's default field values allow the shorthand Struct { field, .. } instead of the lengthy Struct { field, ..Default::default() }

For .. instead of ..Default::default() to work, your Struct needs all fields to have a default value.

This often means = Default::default() boilerplate on every field, because it is very common to want field defaults to be the value of their Default implementation

Before

#[derive(Default)]
pub struct Layout {
    order: u32 = Default::default(),
    location: Point = Default::default(),
    size: Size = Default::default(),
    content_size: Size = Default::default(),
    scrollbar_size: Size = Default::default(),
    border: Rect = Default::default(),
    padding: Rect = Default::default(),
    margin: Rect = Default::default(),
}

With #[auto_default]

#[auto_default]
#[derive(Default)]
pub struct Layout {
    order: u32,
    location: Point,
    size: Size,
    content_size: Size,
    scrollbar_size: Size,
    border: Rect,
    padding: Rect,
    margin: Rect,
}

You can apply the #[auto_default] macro to structs with named fields and enums

If any field or variant has the #[auto_default(skip)] attribute, a default field value of Default::default() will not be added