2个版本
使用旧Rust 2015
0.1.2 | 2018年3月5日 |
---|---|
0.1.0 | 2018年3月2日 |
#28 在 #intermediate
用于 dessert
6KB
121 行
荒漠
在 SerDe 之上的点睛之笔,用于简化自定义 serialize
和 deserialize
特性。
为什么
编写访问者/反序列化和序列化特性可能相当烦人,有时你只是知道如何将你的结构体(s)转换为另一种适合你需求的格式。使用dessert,你只需要创建一个中间结构体以及将其转换为的From/Into特性,并告诉dessert使用此结构体作为中间结构体。
示例
你可以使用 $cargo run --examples demo
运行示例
#[macro_use]
extern crate dessert_derive;
extern crate dessert;
extern crate serde;
extern crate serde_json;
#[macro_use]
extern crate serde_derive;
use dessert::ViaDeserialize;
#[derive(ViaDeserialize, Debug)]
#[via(Intermediate)]
struct FrenchToast {
ingredient: String,
}
#[derive(Deserialize)]
struct Intermediate {
val: String,
}
impl From<Intermediate> for FrenchToast {
fn from(b: Intermediate) -> Self {
Self { ingredient: b.val }
}
}
fn main() {
let serialized_string= "{\"val\":\"Butter\"}";
let v: FrenchToast = serde_json::from_str(serialized_string).unwrap();
println!("Serialized form: {}", serialized_string);
println!("Debug format : {:?}", v)
}
// Serialized form: {"val":"Butter"}
// Debug format : FrenchToast { ingredient: "Butter" }
lib.rs
:
Dessert-Derive
为 desert
库提供派生宏,它提供了一个更简单的接口来实现自定义的 SerDe Serialize
和 Deserialize
特性。
依赖关系
~2MB
~47K SLoC