#![allow(dead_code, clippy::disallowed_names)]
use model_mapper::Mapper;
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct Foo {
pub field1: i32,
pub field2: String,
pub field3: i32,
}
#[derive(Mapper, Debug, PartialEq)]
#[mapper(from, ty = Foo)]
pub struct Bar {
#[mapper(with = field1 + 1)]
pub field1: i32,
#[mapper(with = String::len)]
pub field2: usize,
#[mapper(with = i32::abs)]
pub field3: i32,
}
#[derive(Mapper, Debug, PartialEq)]
#[mapper(from, into, ty = Foo)]
pub struct BarMultiple {
#[mapper(from_with = field1 + 1, into_with = field1 - 1)]
pub field1: i32,
pub field2: String,
#[mapper(with = 0 - field3)]
pub field3: i32,
}
fn main() {
let foo = Foo {
field1: 1,
field2: "hello".to_string(),
field3: -10,
};
let bar = Bar::from(foo.clone());
assert_eq!(bar.field1, 2);
assert_eq!(bar.field2, 5);
assert_eq!(bar.field3, 10);
let multiple = BarMultiple::from(foo.clone());
assert_eq!(multiple.field1, 2);
assert_eq!(multiple.field2, "hello");
assert_eq!(multiple.field3, 10);
let back_to_foo: Foo = multiple.into();
assert_eq!(back_to_foo, foo);
}