#serialization #traits #derive-deserialize #serde-derive #intermediate #struct #ser-de

dessert

一种实现 Serde 自定义序列化和反序列化特性的更简单的方法

3 个版本

使用旧的 Rust 2015

0.1.2 2018 年 3 月 5 日
0.1.1 2018 年 3 月 2 日
0.1.0 2018 年 3 月 2 日

#2108编码

MIT 许可证

93KB

Desert

甜点是 SerDe 之上的一颗樱桃(顶端),简化了自定义 serializedeserialize 特性。

为什么

编写访问者/反序列化和序列化特性可能会相当烦人,有时你只是知道如何将你的结构体转换成另一种符合你需求的形式。使用 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" }

依赖项

~0.4–1MB
~24K SLoC