A library to help you generate code that mapped one struct to another.
use structmapper::StructMapper;structFrom1{base:i32,value:i32,}structFrom2{value:i32,}structFrom3{value:i32,}#[derive(StructMapper)]#[struct_mapper(from_type = "From1", fields(base = "Default::default()"))]#[struct_mapper(from_type = "From2", fields(base = "Default::default()"))]#[struct_mapper( from_type = "(From1, From2, From3)", default_base = "{0}", fields(value = "{0.value} + {1.value} + {2.value}"))]structTo{base:i32,value:i32,}let to = To::from(From1{base:0,value:1});assert_eq!(to.value,1);let to = To::from(From2{value:2});assert_eq!(to.value,2);let to = To::from((From1{base:42,value:1},From2{value:2},From3{value:3},));assert_eq!(to.base,42);assert_eq!(to.value,1 + 2 + 3);use structmapper::StructMapper;structInto1{base:i32,value:i32,}structInto2{base:i32,value:i32,}structInto3{value:i32,}#[derive(StructMapper)]#[struct_mapper(into_type = "Into1")]#[struct_mapper(into_type = "Into2", fields(base = "Default::default()"))]#[struct_mapper(into_type = "Into3", ignore(base))]structFrom{base:i32,value:i32,}let to:Into1 = From{base:1111,value:1}.into();assert_eq!(to.base,1111);assert_eq!(to.value,1);let to:Into2 = From{base:123,value:1}.into();assert_eq!(to.base,0);assert_eq!(to.value,1);let to:Into3 = From{base:0,value:2}.into();assert_eq!(to.value,2);use structmapper::StructMapper;#[derive(Debug,PartialEq,Eq)]enumEnum1{A,B,}#[derive(Debug,PartialEq,Eq,StructMapper)]#[struct_mapper(from_type = "Enum1")]#[struct_mapper(into_type = "Enum1")]enumEnum2{A,B,}let v:Enum1 = Enum2::A.into();assert_eq!(v,Enum1::A);let v:Enum2 = Enum2::from(Enum1::B);assert_eq!(v,Enum2::B);