better_default 1.0.5

The std Default derive, but it allows to constomize the default fields values and has some upgrades.
Documentation
use better_default::Default;

const F4_DEFAULT: [u32; 4] = [1, 2, 3, 4];

fn f3_default() -> &'static str {
    "bbb"
}

#[derive(Default)]
struct Struct<'l> {
    #[default(1)]
    f1: u32,

    #[default("aaa".to_string())]
    f2: String,

    #[default(f3_default())]
    f3: &'l str,

    #[default(F4_DEFAULT)]
    f4: [u32; 4],

    f5: Vec<(f32, char)>,
}

#[test]
fn test_named_fields_per_fields_attrs() {
    let s = Struct::default();

    assert_eq!(s.f1, 1);
    assert_eq!(s.f2, "aaa");
    assert_eq!(s.f3, "bbb");
    assert_eq!(s.f4, [1, 2, 3, 4]);
    assert_eq!(s.f5, vec![]);
}

#[derive(Default)]
#[default(f1: 1, f2: "aaa".to_string(), f3: f3_default(), f4: F4_DEFAULT)]
struct Struct2<'l> {
    f1: u32,

    f2: String,

    f3: &'l str,

    f4: [u32; 4],

    f5: Vec<(f32, char)>,
}

#[test]
fn test_named_fields_top_field_attrs() {
    let s = Struct2::default();

    assert_eq!(s.f1, 1);
    assert_eq!(s.f2, "aaa");
    assert_eq!(s.f3, "bbb");
    assert_eq!(s.f4, [1, 2, 3, 4]);
    assert_eq!(s.f5, vec![]);
}

#[derive(Default)]
struct Struct3<'l>(
    #[default(1)] u32,
    #[default("aaa".to_string())] String,
    #[default(f3_default())] &'l str,
    #[default(F4_DEFAULT)] [u32; 4],
    Vec<(f32, char)>,
);

#[test]
fn test_unnamed_fields_per_fields_attrs() {
    let s = Struct3::default();

    assert_eq!(s.0, 1);
    assert_eq!(s.1, "aaa");
    assert_eq!(s.2, "bbb");
    assert_eq!(s.3, [1, 2, 3, 4]);
    assert_eq!(s.4, vec![]);
}

#[derive(Default)]
#[default(0: 1, 1: "aaa".to_string(), 2: f3_default(), 3: F4_DEFAULT)]
struct Struct4<'l>(u32, String, &'l str, [u32; 4], Vec<(f32, char)>);

#[test]
fn test_unnamed_fields_top_field_attrs() {
    let s = Struct4::default();

    assert_eq!(s.0, 1);
    assert_eq!(s.1, "aaa");
    assert_eq!(s.2, "bbb");
    assert_eq!(s.3, [1, 2, 3, 4]);
    assert_eq!(s.4, vec![]);
}

#[derive(Default, PartialEq, Debug)]
struct Unit;

#[test]
fn test_unit() {
    let default = Unit::default();
    assert_eq!(Unit, default);
}