#serde #serialization #json-key #no-alloc

无 std monostate

只能从特定值反序列化的类型

14 个版本

0.1.13 2024 年 5 月 6 日
0.1.11 2024 年 1 月 2 日
0.1.10 2023 年 11 月 14 日
0.1.9 2023 年 7 月 21 日
0.1.0 2022 年 1 月 25 日

#1256编码

Download history 30665/week @ 2024-05-03 31052/week @ 2024-05-10 29206/week @ 2024-05-17 29863/week @ 2024-05-24 32136/week @ 2024-05-31 34358/week @ 2024-06-07 31618/week @ 2024-06-14 36338/week @ 2024-06-21 29181/week @ 2024-06-28 32907/week @ 2024-07-05 30632/week @ 2024-07-12 38578/week @ 2024-07-19 33905/week @ 2024-07-26 33078/week @ 2024-08-02 31434/week @ 2024-08-09 25238/week @ 2024-08-16

130,788 每月下载次数
用于 107 个 crate(16 直接使用)

MIT/Apache

52KB
1.5K SLoC

Monostate

github crates.io docs.rs build status

该库实现了一个用于零大小类型的类型宏,该类型仅从特定值进行 Serde 反序列化。

[dependencies]
monostate = "0.1"

示例

use monostate::MustBe;
use serde::Deserialize;

#[derive(Deserialize)]
struct Example {
    kind: MustBe!("success"),
    code: MustBe!(200),
}

上面的结构体会从 JSON 中的 {"kind":"success", "code":200} 反序列化,但如果 "kind" 或 "code" 的值不是指定的值,则反序列化会失败。

这有时在处理未标记枚举时很有帮助,其中变体标识比 Serde 的外部标记和内部标记表示法处理的更复杂,例如,因为变体标记类型或键不一致。

use monostate::MustBe;
use serde::Deserialize;

#[derive(Deserialize)]
#[serde(untagged)]
pub enum ApiResponse {
    Success {
        success: MustBe!(true),
    },
    Error {
        kind: MustBe!("error"),
        message: String,
    },
}

许可证

根据您的选择,在 Apache 许可证第 2 版MIT 许可证 下许可。
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,均应双重许可如上所述,而不附加任何额外条款或条件。

依赖项

~0.4–1MB
~23K SLoC