aspartial 0.0.4

Typescript-like 'partial' types
Documentation
#[derive(::aspartial::AsPartial)]
#[aspartial(name=PartialOuterStruct)]
#[aspartial(attrs(#[derive(PartialEq, Eq, Debug)]))]
#[allow(dead_code)]
struct OuterStruct{
    mid: MidStruct,
}

#[derive(::aspartial::AsPartial)]
#[aspartial(newtype)]
#[aspartial(attrs(#[derive(PartialEq, Eq, Debug)]))]
#[derive(::serde::Deserialize)]
struct MidStruct(InnerStruct);

#[derive(::aspartial::AsPartial, ::serde::Deserialize)]
#[aspartial(name = PartialInnerStruct)]
#[aspartial(attrs(#[derive(PartialEq, Eq, Debug)]))]
struct InnerStruct{
    a: u32,
    b: String,
}

#[test]
fn test_newtype_derive(){
    let raw_outer = serde_json::json!(
        {
            "mid": {
                "a": 123,
            }
        }
    );

    let parsed: PartialOuterStruct = serde_json::from_value(raw_outer).unwrap();
    let expected = PartialOuterStruct{
        mid: Some(PartialInnerStruct {
            a: Some(123),
            b: None
        })
    };
    assert_eq!(parsed, expected);
}