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);
}