2个版本

0.1.1 2022年6月7日
0.1.0 2022年2月27日

73#serde-derive


用于 serde-deserialize-over

MIT/Apache

20KB
570

serde-deserialize-over

此库提供了一个特质 + 派生宏,允许你在现有结构体实例之上反序列化部分值。

示例

use serde_deserialize_over::DeserializeOver;

#[derive(Default, Debug, DeserializeOver)]
struct ExampleStruct {
    pub a: String,
    pub b: i32,
}

const JSON: &str = r#"{ "a": "test" }"#;

fn main() {
    let mut instance = ExampleStruct {
        a: "a string".to_owned(),
        b: 64,
    };
    let mut de = serde_json::Deserializer::new(serde_json::de::StrRead::new(JSON));

    instance
        .deserialize_over(&mut de)
        .expect("Failed to deserialize");

    println!("{:#?}", instance);
}

默认情况下,结构体成员使用 serde::Deserialize 特质进行反序列化。然而,如果你想继续在成员上反序列化,可以通过标记它们为 #[deserialize_over] 属性来实现。

use serde_deserialize_over::DeserializeOver;

#[derive(Default, DeserializeOver, Debug)]
struct StructA {
    #[deserialize_over]
    pub a: StructB,
    pub b: i32,
}

#[derive(Default, DeserializeOver, Debug)]
struct StructB {
    pub x: usize,
    pub y: String,
}

const JSON: &str = r#"{ "a": { "x": 1 }, "b": 0 }"#;

fn main() {
    let mut instance = StructA {
        a: StructB {
            x: 128,
            y: "a string".to_owned(),
        },
        b: 64,
    };
    let mut de = serde_json::Deserializer::new(serde_json::de::StrRead::new(JSON));

    instance
        .deserialize_over(&mut de)
        .expect("Failed to deserialize");

    println!("{:#?}", instance);
}

许可证

根据以下任一许可证授权:

由您选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,包括在作品中包含的贡献,应按上述方式双重许可,不附加任何额外条款或条件。


lib.rs:

为serde-deserialize-over提供派生宏。

依赖项

~3.5MB
~75K SLoC