evil 0.0.0-reserved

reserved
Documentation

The evil crate

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.

auto-default = "0.2"

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

Global Import

This will make #[auto_default] globally accessible in your entire crate, without needing to import it:

#[macro_use(auto_default)]
extern crate auto_default;