#![allow(dead_code)]
use model_mapper::Mapper;
#[derive(Clone)]
struct Foo {
field1: String,
field2: i64,
}
#[derive(Debug, PartialEq, Eq, Mapper)]
#[mapper(into, ty = Foo)]
struct Bar1 {
field1: String,
field2: i64,
#[mapper(skip)]
field3: i64,
#[mapper(skip)]
field4: Option<String>,
}
#[derive(Debug, PartialEq, Eq, Mapper)]
#[mapper(from, ty = Foo)]
struct Bar2 {
field1: String,
field2: i64,
#[mapper(skip(default(value = field2 / 2)))]
field3: i64,
#[mapper(skip(default))]
field4: Option<String>,
}
#[derive(Debug, PartialEq, Eq, Mapper)]
#[mapper(from(custom = "from_foo_custom"), ty = Foo)]
struct Bar3 {
field1: String,
field2: i64,
#[mapper(skip)]
field3: i64,
#[mapper(skip)]
field4: Option<String>,
}
#[derive(Debug, PartialEq, Eq, Mapper)]
#[mapper(from(custom), ty = Foo)]
struct Bar4 {
field1: String,
field2: i64,
#[mapper(skip(default(value = field2 / 2)))]
field3: i64,
#[mapper(skip)]
field4: Option<String>,
}
#[derive(Default)]
enum FooEnum {
#[default]
One,
Two,
}
#[derive(Mapper)]
#[mapper(into, ty = FooEnum)]
enum BarEnum {
One,
Two,
#[mapper(skip(default(value = FooEnum::Two)))]
Three,
#[mapper(skip(default))]
Four,
}
fn main() {
let source = Foo {
field1: "val".into(),
field2: 2,
};
let mapped = Bar2::from(source.clone());
assert_eq!(
Bar2 {
field1: "val".into(),
field2: 2,
field3: 1,
field4: None,
},
mapped
);
let mapped = Bar3::from_foo_custom(source.clone(), 1, None);
assert_eq!(
Bar3 {
field1: "val".into(),
field2: 2,
field3: 1,
field4: None,
},
mapped
);
let mapped = Bar4::from_foo(source, None);
assert_eq!(
Bar4 {
field1: "val".into(),
field2: 2,
field3: 1,
field4: None,
},
mapped
);
}