2个版本
0.1.1 | 2022年6月7日 |
---|---|
0.1.0 | 2022年2月27日 |
73 在 #serde-derive
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版本,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,包括在作品中包含的贡献,应按上述方式双重许可,不附加任何额外条款或条件。
lib.rs
:
为serde-deserialize-over提供派生宏。
依赖项
~3.5MB
~75K SLoC