#serde #const #untagged #serde-json #no-alloc

no-std serde-constant

serde的常量值

1个不稳定版本

0.1.0 2023年10月29日

#1491 in 编码

MIT/Apache

16KB
301 代码行

serde-constant

这个crate提供了一个可以表示单个常量serde值的类型。例如,断言特定的bool值始终为真。您可以用此来在serde(untagged)结构中进行区分,或仅用于验证。

示例

use serde_constant::ConstBool;
#[derive(Deserialize)]
struct Foo {
    bar: String,
    baz: ConstBool<true>,
}
assert!(serde_json::from_value::<Foo>(json!({ "bar": "quux", "baz": true })).is_ok());
assert!(serde_json::from_value::<Foo>(json!({ "bar": "quux", "baz": false })).is_err());
use serde_constant::ConstI64;
// int tags? No problem!
#[derive(Deserialize)]
#[serde(untagged)]
enum Foo {
    Bar {
        tag: ConstI64<1>,
    },
    Baz {
        tag: ConstI64<2>,
        x: Option<String>,
    },
}
assert!(matches!(
    serde_json::from_value(json!({ "tag": 2, "x": null }))?,
    // would have been Bar if `tag` were just `i64`
    Foo::Baz { x: None, .. },
));

依赖

~110–340KB