2个版本

使用旧Rust 2015

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

#28#intermediate


用于 dessert

MIT 许可证

6KB
121

荒漠

SerDe 之上的点睛之笔,用于简化自定义 serializedeserialize 特性。

为什么

编写访问者/反序列化和序列化特性可能相当烦人,有时你只是知道如何将你的结构体(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 SerializeDeserialize 特性。

依赖关系

~2MB
~47K SLoC