#serde #apply #macro

serde_apply_macros

serde_apply的派生宏

2个版本

0.1.1 2022年5月10日
0.1.0 2022年5月10日

#41 in #apply


用于 serde_apply

MIT 许可证

4KB
57

反序列化部分结构体并更新现有状态

#[derive(Default, Debug, Deserialize, serde_apply_macros::SerdeApply)]
struct Foobar {
    a: String,
    b: Option<String>,
}

#[derive(Default, Debug, Deserialize, serde_apply_macros::SerdeApply)]
struct Bar {
    foo: Foobar,
    baz: i32,
}

fn main() {
    let mut my_bar = Bar::default();
    println!("Before update: {:#?}", my_bar);
    serde_apply::apply(
        &mut my_bar,
        &mut serde_json::Deserializer::from_str(r#"{}"#),
    )
    .unwrap();
    println!("After first (noop) update: {:#?}", my_bar);
    serde_apply::apply(
        &mut my_bar,
        &mut serde_json::Deserializer::from_str(r#"{"foo": {"b": "Hello World!"}}"#),
    )
    .unwrap();
    println!("After second update: {:#?}", my_bar);
}
Before update: Bar {
    foo: Foobar {
        a: "",
        b: None,
    },
    baz: 0,
}
After first (noop) update: Bar {
    foo: Foobar {
        a: "",
        b: None,
    },
    baz: 0,
}
After second update: Bar {
    foo: Foobar {
        a: "",
        b: Some(
            "Hello World!",
        ),
    },
    baz: 0,
}

依赖

~1.5MB
~34K SLoC