#serialization #unit #deserialize #struct #no-alloc #name #string

无 std serde_unit_struct

(反)序列化单元结构为它的名称

3 个版本

0.1.3 2023 年 12 月 16 日
0.1.2 2023 年 11 月 8 日
0.1.1 2022 年 4 月 15 日
0.1.0 2022 年 3 月 1 日

#354编码

Download history 889/week @ 2024-04-07 820/week @ 2024-04-14 782/week @ 2024-04-21 823/week @ 2024-04-28 863/week @ 2024-05-05 634/week @ 2024-05-12 772/week @ 2024-05-19 806/week @ 2024-05-26 961/week @ 2024-06-02 1091/week @ 2024-06-09 866/week @ 2024-06-16 799/week @ 2024-06-23 855/week @ 2024-06-30 610/week @ 2024-07-07 1134/week @ 2024-07-14 962/week @ 2024-07-21

每月 3,615 次下载
用于 midwest_mainline

MIT/Apache 协议

10KB
126 代码行

Serde Unit Struct Derive

该包为 Serde 的 SerializeDeserialize 特性提供了 derive 宏,以便单元结构以字符串形式表示其名称。如果您希望保留类型信息,即区分不同的单元结构,这非常有用。

没有 serde_unit_struct

use serde::{Deserialize, Serialize};

#[derive(Deserialize, Serialize)]
struct Foo;

#[derive(Deserialize, Serialize)]
struct Bar;

fn main() {
    // Normally, unit structs serialize to null.
    let json = serde_json::to_string(&Foo).unwrap();
    assert_eq!(json, "null");

    // We can successfully deserialize them, but...
    let foo: Foo = serde_json::from_str(&json).unwrap();
    assert_eq!(foo, Foo);

    // ...this also works; the type information is lost.
    let bar: Bar = serde_json::from_str(&json).unwrap();
    assert_eq!(bar, Bar);
}

使用 serde_unit_struct

use serde_unit_struct::{Deserialize_unit_struct, Serialize_unit_struct};

#[derive(Deserialize_unit_struct, Serialize_unit_struct)]
struct Foo;

#[derive(Deserialize_unit_struct, Serialize_unit_struct)]
struct Bar;

fn main() {
    // Now, unit structs serialise to their name as a string.
    let json = serde_json::to_string(&Foo).unwrap();
    assert_eq!(json, "\"Foo\"");

    // We can successfully deserialize them.
    let foo: Foo = serde_json::from_str(&json).unwrap();
    assert_eq!(foo, Foo);

    // Type information is maintained.
    let bar: Result<Bar, _> = serde_json::from_str(&json);
    assert!(bar.is_err());
}

许可证

根据您的选择,此代码受 Apache License, Version 2.0 或 MIT 许可证的许可,请参阅 Apache License, Version 2.0MIT 许可证

除非您明确说明,否则您根据 Apache-2.0 许可证定义的任何旨在包含在此包中的贡献,均应如上所述双重许可,不附加任何额外条款或条件。

依赖项

~270–720KB
~17K SLoC