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, Debug, PartialEq)]
pub struct Unit;

#[test]
fn test_unit_struct() {
    let unit = Unit::new();
    assert_eq!(Unit, unit);
}

#[derive(ctor, Debug, PartialEq)]
pub struct Empty {}

#[test]
fn test_empty_struct_no_config() {
    let empty = Empty::new();
    assert_eq!(Empty {}, empty)
}

#[derive(ctor, Debug, PartialEq)]
pub struct OneFieldStruct {
    value: u32,
}

#[test]
fn test_struct_with_field() {
    let ofs = OneFieldStruct::new(300);
    assert_eq!(OneFieldStruct { value: 300 }, ofs)
}

#[derive(ctor, Debug, PartialEq)]
pub struct ManyFieldStruct {
    value1: u32,
    value2: bool,
}

#[test]
fn test_struct_with_many_fields() {
    let mfs = ManyFieldStruct::new(400, true);
    assert_eq!(
        ManyFieldStruct {
            value1: 400,
            value2: true
        },
        mfs
    );
}

#[derive(ctor, Debug, PartialEq)]
pub struct GenericStruct<T> {
    item: T,
}

#[derive(ctor, Debug, PartialEq)]
pub struct WhereStruct<T>
where
    T: Into<String>,
{
    item: T,
}

#[derive(ctor, Debug, PartialEq)]
pub struct StructWithClosure {
    closure: fn(usize) -> bool,
}

#[derive(ctor, Debug, PartialEq)]
pub struct StructWithClosureGeneric<F>
where
    F: Fn(usize) -> bool,
{
    closure: F,
}

#[test]
fn test_generic_structs() {
    let generic1: GenericStruct<usize> = GenericStruct::new(400);
    assert_eq!(GenericStruct { item: 400 as usize }, generic1);

    let generic2: WhereStruct<&'static str> = WhereStruct::new("FooBar");
    assert_eq!(WhereStruct { item: "FooBar" }, generic2);
}

#[test]
fn test_closure_structs() {
    let closure1 = StructWithClosure::new(|us| us == 439);
    assert!((closure1.closure)(439));

    let target = 440;
    let closure2 = StructWithClosureGeneric::new(|us| us == target);
    assert!((closure2.closure)(440))
}