#serde-serialize #serialization #deserializing #type #another #supports #round-trip

serde_roundtrip

一个特质,用于当serde支持将一种类型序列化为另一种类型时进行序列化和反序列化

1 个不稳定版本

使用旧的Rust 2015

0.1.0 2017年3月29日

8#反序列化

MPL-2.0 许可证

17KB
399

serde_roundtrip

一个特质,用于当serde支持将一种类型序列化为另一种类型时进行序列化和反序列化。

主要的特质是 S: RoundTrip<T>,这意味着类型 S 的数据可以使用serde进行序列化,然后安全地反序列化为类型 T。这允许在不拥有数据的情况下安全地进行序列化,例如将一个 &[&str] 序列化,然后反序列化为一个 Vec<String>

RoundTrip<T> 特质提供了一个方法 fn round_trip(self) -> T,其语义与序列化然后反序列化相同。这允许在内存表示可以用作的情况下简化序列化。

RoundTrip 特质为serde提供序列化的类型实现。对于用户定义的类型,serde_roundtrip_derive 包提供 derive(RoundTrip)

例如

// A type which can be round-tripped by serde.
// The type might be changed by round-tripping,
// for example a message might be sent as a `Msg<&str>`
// and arrive as a `Msg<String>`.
#[derive(Serialize, Deserialize, RoundTrip, Debug, PartialEq, Eq)]
struct Msg<T>(T);

fn main() {
    // Create a message at type `Msg<&str>`
    let msg: Msg<&'static str> = Msg("hello");

    // Round-trip it via JSON.
    let json = serde_json::to_string(&msg).unwrap();
    let round_tripped: Msg<String> = serde_json::from_str(&*json).unwrap();

    // This is the same as calling the `round_trip()` method.
    assert_eq!(round_tripped, msg.round_trip());
}

依赖项

~500KB
~11K SLoC