#serialization #serde #serde-derive #integer #macro-derive #no-alloc

macro no-std serde_short

Derive Serialize and Deserialize for enum reperesented as C short enum

3 releases

0.1.2 Sep 2, 2024
0.1.1 Sep 2, 2024
0.1.0 Sep 2, 2024

#1585 in Encoding

23 downloads per month

MIT license

14KB
249 lines

Serde short derive

This crate provides a derive macro to derive Serde's Serialize and Deserialize traits for C enum represented as short enum u8, u16, u32 or in case first value is < 0 i8, i16 or i32

99% of the code is a copy/paste from serde-repr all credits goes to this crate

[dependencies]
serde = "1.0"
serde_short = "0.1"
use serde_short::{Serialize_short, Deserialize_short};

#[derive(Serialize_short, Deserialize_short, PartialEq, Debug)]
#[repr(u8)]
enum SmallPrime {
    Two = 2,
    Three = 3,
    Five = 5,
    Seven = 7,
}

fn main() -> serde_json::Result<()> {
    let j = serde_json::to_string(&SmallPrime::Seven)?;
    assert_eq!(j, "7");

    let p: SmallPrime = serde_json::from_str("2")?;
    assert_eq!(p, SmallPrime::Two);

    Ok(())
}

Credits


lib.rs:

Derive Serialize and Deserialize that uses short enum representation for C enum.

A small variant of the serde-repr (99% of the code is simple a copy/paste)

Examples

use serde_short::{Serialize_short, Deserialize_short};

#[derive(Serialize_short, Deserialize_short, PartialEq, Debug)]
#[repr(C)]
enum SmallPrime {
    Two = 2,
    Three = 3,
    Five = 5,
    Seven = 7,
}

fn main() -> serde_json::Result<()> {
    let j = serde_json::to_string(&SmallPrime::Seven)?;
    assert_eq!(j, "7");

    let p: SmallPrime = serde_json::from_str("2")?;
    assert_eq!(p, SmallPrime::Two);

    Ok(())
}

Dependencies

~235–680KB
~16K SLoC