# `auto-default`
[](https://crates.io/crates/auto-default)
[](https://docs.rs/auto-default)


[](https://github.com/nik-rev/auto-default)
This crate provides an attribute macro `#[auto_default]`, which adds a default field value of
`Default::default()` to fields that do not have one.
```toml
[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](https://github.com/rust-lang/rust/issues/132162) 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
```rust
#[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(),
}
```
#### After
```rust
#[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@auto_default) macro to `struct`s with named fields, or enums
If any field or variant has the `#[auto_default(skip)]` attribute, a default field value of `Default::default()`
will not be added