derive-ctor 0.2.0

Adds `#[derive(ctor)]` which allows for the auto-generation of a constructor.
Documentation
use derive_ctor::ctor;

#[derive(ctor, Debug, PartialEq)]
#[ctor(new, new2)]
struct TargetedGenerationStruct {
    arg1: u32,
    #[ctor(default = [0])]
    arg2: u32
}

#[test]
fn test_struct_with_targeted_generation() {
    let targeted = TargetedGenerationStruct::new(100);
    assert_eq!(TargetedGenerationStruct { arg1: 100, arg2: Default::default() }, targeted);
    let targeted2 = TargetedGenerationStruct::new2(50, 41);
    assert_eq!(TargetedGenerationStruct { arg1: 50, arg2: 41 }, targeted2);
}

fn test_method_2() -> String {
    String::from("FooBar")
}

#[derive(ctor, Debug, PartialEq)]
#[ctor(new, new2)]
struct TargetedGenerationStruct2 {
    #[ctor(expr(test_method_2()) = [1])]
    arg1: String,
    #[ctor(expr(33) = 0)]
    arg2: u32
}

#[test]
fn test_struct_with_multiple_targeted_generations() {
    let tgs1 = TargetedGenerationStruct2::new(String::from("one"));
    assert_eq!(TargetedGenerationStruct2 { arg1: String::from("one"), arg2: 33 }, tgs1);

    let tgs2 = TargetedGenerationStruct2::new2(95);
    assert_eq!(TargetedGenerationStruct2 { arg1: String::from("FooBar"), arg2: 95}, tgs2);
}

#[derive(ctor, Debug, PartialEq)]
#[ctor(m1, m2, m3)]
struct TestStructWithFieldWithMultipleTargets {
    #[ctor(into)]
    arg1: String,
    #[ctor(expr(5) = [0, 1])]
    arg2: u32
}

#[test]
fn test_struct_multiple_targeted_generations_single_field() {
    let tswfwmt1 = TestStructWithFieldWithMultipleTargets::m1("One");
    assert_eq!(TestStructWithFieldWithMultipleTargets { arg1: String::from("One"), arg2: 5 }, tswfwmt1);

    let tswfwmt1 = TestStructWithFieldWithMultipleTargets::m2("Two");
    assert_eq!(TestStructWithFieldWithMultipleTargets { arg1: String::from("Two"), arg2: 5 }, tswfwmt1);

    let tswfwmt1 = TestStructWithFieldWithMultipleTargets::m3("Three", 77);
    assert_eq!(TestStructWithFieldWithMultipleTargets { arg1: String::from("Three"), arg2: 77 }, tswfwmt1);
}