use derive_ctor::ctor;
#[derive(ctor, Debug, PartialEq)]
struct StructExpr {
provided: u32,
#[ctor(expr(10))]
generated: u32
}
#[derive(ctor, Debug, PartialEq)]
struct StructManyExpr {
provided: u32,
#[ctor(expr(11))]
generated1: u32,
#[ctor(expr(false))]
generated2: bool
}
#[derive(ctor, Debug, PartialEq)]
struct StructComplexExpr {
provided: u32,
#[ctor(expr(String::from("Foo")))]
generated: String
}
#[derive(ctor, Debug, PartialEq)]
struct StructReliantExpr {
provided: u32,
#[ctor(expr(provided.to_string()))]
generated: String
}
#[test]
fn test_struct_expr_field() {
let test = StructExpr::new(100);
assert_eq!(StructExpr { provided: 100, generated: 10 }, test);
}
#[test]
fn test_struct_many_expr_fields() {
let test = StructManyExpr::new(101);
assert_eq!(StructManyExpr { provided: 101, generated1: 11, generated2: false }, test);
}
#[test]
fn test_struct_complex_expr_field() {
let test = StructComplexExpr::new(102);
assert_eq!(StructComplexExpr { provided: 102, generated: String::from("Foo") }, test);
}
#[test]
fn test_struct_reliant_expr_field() {
let test = StructReliantExpr::new(103);
assert_eq!(StructReliantExpr { provided: 103, generated: 103.to_string() }, test);
}
#[derive(ctor, Debug, PartialEq)]
struct SelfRefExpr {
#[ctor(expr!(value - 1))]
value: u32
}
#[derive(ctor, Debug, PartialEq)]
struct ComplexSelfRefExpr {
#[ctor(expr!(n1 - n2))]
n1: u32,
n2: u32
}
#[derive(ctor, Debug, PartialEq)]
struct ChangeInputTypeExpr {
#[ctor(expr(String -> Box::new(value)))]
value: Box<String>
}
#[test]
fn test_self_referencing_expr_field() {
let test = SelfRefExpr::new(105);
assert_eq!(SelfRefExpr { value: 104 }, test);
}
#[test]
fn test_complex_self_referencing_expr_field() {
let test = ComplexSelfRefExpr::new(489, 69);
assert_eq!(ComplexSelfRefExpr { n1: 420, n2: 69 }, test);
}
#[test]
fn test_changed_input_type() {
let test = ChangeInputTypeExpr::new(String::from("ABC"));
assert_eq!(ChangeInputTypeExpr { value: Box::new(String::from("ABC"))}, test)
}