#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

#1617 in Encoding

Download history 270/week @ 2024-08-28 77/week @ 2024-09-04 43/week @ 2024-09-11 30/week @ 2024-09-18 47/week @ 2024-09-25 45/week @ 2024-10-02 1/week @ 2024-10-23 27/week @ 2024-10-30 574/week @ 2024-11-06 1475/week @ 2024-11-13 1285/week @ 2024-11-20 1052/week @ 2024-11-27 896/week @ 2024-12-04 848/week @ 2024-12-11

4,273 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

~230–670KB
~16K SLoC