o2o 0.2.4

Object to Object mapper for Rust
Documentation
use o2o::o2o;

#[derive(Clone, o2o)]
#[map(StuffWrapper)]
#[map(StuffWrapper3 as ())]
#[o2o(wrapped(StuffWrapper| payload, ~.clone()))]
#[o2o(wrapped(StuffWrapper3| 0, ~.clone()))]
struct Stuff{thing: i32}

#[derive(Clone, o2o)]
#[map(StuffWrapper2 as {})]
#[map(StuffWrapper4)]
#[o2o(wrapped(StuffWrapper2| payload, ~.clone()))]
#[o2o(wrapped(StuffWrapper4| 0, ~.clone()))]
struct TupleStuff(i32);

struct StuffWrapper {
    payload: Stuff,
}

struct StuffWrapper2 {
    payload: TupleStuff,
}

struct StuffWrapper3(Stuff);

struct StuffWrapper4(TupleStuff);

#[test]
fn wrappee2wrapper() {
    let payload = TupleStuff(123);

    let wrapper: StuffWrapper2 = payload.into();

    assert_eq!(123, wrapper.payload.0);
}

#[test]
fn wrappee2wrapper_ref() {
    let payload = &TupleStuff(123);

    let wrapper: StuffWrapper2 = payload.into();

    assert_eq!(payload.0, wrapper.payload.0);
}

#[test]
fn wrapper2wrappee() {
    let wrapper = StuffWrapper2 { payload: TupleStuff(123) };

    let payload: TupleStuff = wrapper.into();

    assert_eq!(123, payload.0);
}

#[test]
fn wrapper2wrappee_ref() {
    let wrapper = &StuffWrapper2 { payload: TupleStuff(123) };

    let payload: TupleStuff = wrapper.into();

    assert_eq!(wrapper.payload.0, payload.0);
}

#[test]
fn wrappee2wrapper_2() {
    let payload = Stuff {thing: 123};

    let wrapper: StuffWrapper = payload.into();

    assert_eq!(123, wrapper.payload.thing);
}

#[test]
fn wrappee2wrapper_ref_2() {
    let payload = &Stuff {thing: 123};

    let wrapper: StuffWrapper = payload.into();

    assert_eq!(payload.thing, wrapper.payload.thing);
}

#[test]
fn wrapper2wrappee_2() {
    let wrapper = StuffWrapper { payload: Stuff { thing: 123 }};

    let payload: Stuff = wrapper.into();

    assert_eq!(123, payload.thing);
}

#[test]
fn wrapper2wrappee_ref_2() {
    let wrapper = &StuffWrapper { payload: Stuff { thing: 123 }};

    let payload: Stuff = wrapper.into();

    assert_eq!(wrapper.payload.thing, payload.thing);
}

#[test]
fn wrappee2wrapper_3() {
    let payload = TupleStuff(123);

    let wrapper: StuffWrapper4 = payload.into();

    assert_eq!(123, wrapper.0.0);
}

#[test]
fn wrappee2wrapper_ref_3() {
    let payload = &TupleStuff(123);

    let wrapper: StuffWrapper4 = payload.into();

    assert_eq!(payload.0, wrapper.0.0);
}

#[test]
fn wrapper2wrappee_3() {
    let wrapper = StuffWrapper4(TupleStuff(123));

    let payload: TupleStuff = wrapper.into();

    assert_eq!(123, payload.0);
}

#[test]
fn wrapper2wrappee_ref_3() {
    let wrapper = &StuffWrapper4(TupleStuff(123));

    let payload: TupleStuff = wrapper.into();

    assert_eq!(wrapper.0.0, payload.0);
}

#[test]
fn wrappee2wrapper_4() {
    let payload = Stuff{thing: 123};

    let wrapper: StuffWrapper3 = payload.into();

    assert_eq!(123, wrapper.0.thing);
}

#[test]
fn wrappee2wrapper_ref_4() {
    let payload = &Stuff{thing: 123};

    let wrapper: StuffWrapper3 = payload.into();

    assert_eq!(payload.thing, wrapper.0.thing);
}

#[test]
fn wrapper2wrappee_4() {
    let wrapper = StuffWrapper3(Stuff { thing: 123 });

    let payload: Stuff = wrapper.into();

    assert_eq!(123, payload.thing);
}

#[test]
fn wrapper2wrappee_ref_4() {
    let wrapper = &StuffWrapper3(Stuff { thing: 123 });

    let payload: Stuff = wrapper.into();

    assert_eq!(wrapper.0.thing, payload.thing);
}