derive-ctor 1.0.6

Adds `#[derive(ctor)]` which allows for the auto-generation of struct, enum, and union constructors.
Documentation
use derive_ctor::ctor;

#[derive(ctor)]
union UnionOneField {
    value: i32
}

#[derive(ctor)]
union UnionManyField {
    int: i32,
    float: f32,
    uint: u32
}

#[test]
fn test_union_one_field() {
    let uof = UnionOneField::value(-5);
    unsafe { assert_eq!(uof.value, -5); }
}

#[test]
fn test_union_many_fields() {
    let v1 = UnionManyField::int(-10);
    unsafe { assert_eq!(v1.int, -10); }

    let v2 = UnionManyField::float(31.231);
    unsafe { assert_eq!(v2.float, 31.231); }

    let v3 = UnionManyField::uint(231);
    unsafe { assert_eq!(v3.uint, 231) }
}

#[derive(ctor)]
#[ctor(prefix = new, vis = pub(crate))]
union UnionPrefix {
    int: i32,
    float: f32
}

#[test]
fn test_union_ctor_defaults() {
    let v1 = UnionPrefix::new_float(1.1);
    unsafe { assert_eq!(v1.float, 1.1); }

    let v2 = UnionPrefix::new_int(5);
    unsafe { assert_eq!(v2.int, 5) }
}

#[derive(ctor)]
#[ctor(prefix = new)]
union UnionOverride {
    #[ctor(new)]
    int: i32,
    float: f32,
    #[ctor(const new_other)]
    other: u32
}

#[test]
fn test_union_override() {
    let v1 = UnionOverride::new(18);
    unsafe { assert_eq!(v1.int, 18); }

    let v2 = UnionOverride::new_float(91.7);
    unsafe { assert_eq!(v2.float, 91.7); }

    let v3 = UnionOverride::new_other(181);
    unsafe { assert_eq!(v3.other, 181); }
}