use structural_convert::StructuralConvert; #[test] fn variant_is_unit_default() { #[derive(Debug, PartialEq, StructuralConvert)] #[convert(try_into(Lhs, default))] enum Rhs { #[convert(try_into(skip))] A, } #[derive(Debug, PartialEq, Default)] enum Lhs { #[default] X, } assert_eq!(Lhs::default(), Rhs::A.try_into().unwrap()); } #[test] fn variant_is_unnamed_default() { #[derive(Debug, PartialEq, StructuralConvert)] #[convert(try_into(Lhs, default))] enum Rhs { #[convert(try_into(skip))] A(i8, u32), } #[derive(Debug, PartialEq)] enum Lhs { X(i32, u32), } impl Default for Lhs { fn default() -> Self { Lhs::X(Default::default(), Default::default()) } } assert_eq!(Lhs::default(), Rhs::A(1, 2).try_into().unwrap()); } #[test] fn variant_is_named_default() { #[derive(Debug, PartialEq, StructuralConvert)] #[convert(try_into(Lhs, default))] enum Rhs { #[convert(try_into(skip))] A { z: i8, x: u32 }, } #[derive(Debug, PartialEq)] enum Lhs { X {}, } impl Default for Lhs { fn default() -> Self { Lhs::X {} } } assert_eq!(Lhs::default(), Rhs::A { z: 1, x: 2 }.try_into().unwrap()); } #[test] fn variant_is_named_default_to_field() { #[derive(Debug, PartialEq, StructuralConvert)] #[convert(try_into(Lhs, default_for_fields("y", "e")))] enum Rhs { A { z: i8, x: u32 }, } #[derive(Debug, PartialEq)] enum Lhs { A { z: i32, x: u32, y: u32, e: u32 }, } assert_eq!( Lhs::A { z: 1, x: 2, y: Default::default(), e: Default::default() }, Rhs::A { z: 1, x: 2 }.try_into().unwrap() ); }