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

no-std serde-constant

Const values for serde

1 unstable release

0.1.0 Oct 29, 2023

#1791 in Encoding

Download history 21/week @ 2024-11-16 4/week @ 2024-11-23 147/week @ 2024-11-30 103/week @ 2024-12-07 109/week @ 2024-12-14 9/week @ 2024-12-21 2/week @ 2025-01-04 4/week @ 2025-01-11 1/week @ 2025-01-18 34/week @ 2025-01-25 91/week @ 2025-02-01 80/week @ 2025-02-08 92/week @ 2025-02-15 88/week @ 2025-02-22 86/week @ 2025-03-01

353 downloads per month

MIT/Apache

16KB
301 lines

serde-constant

This crate provides a type that can represent a single-const serde value. For example, asserting that a particular bool is always true. You can use this for disambiguation in serde(untagged) structures, or just for validation.

Examples

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, .. },
));

Dependencies

~99–320KB