postcard 1.0.8

A no_std + serde compatible message library for Rust
Documentation
#![cfg(feature = "derive")]

use postcard::schema::{NamedType, NamedValue, NamedVariant, Schema, SdmTy, Varint};

const U8_SCHEMA: NamedType = NamedType {
    name: "u8",
    ty: &SdmTy::U8,
};
const U32_SCHEMA: NamedType = NamedType {
    name: "u32",
    ty: &SdmTy::Varint(Varint::U32),
};
const U64_SCHEMA: NamedType = NamedType {
    name: "u64",
    ty: &SdmTy::Varint(Varint::U64),
};

const I16_SCHEMA: NamedType = NamedType {
    name: "i16",
    ty: &SdmTy::Varint(Varint::I16),
};
const I32_SCHEMA: NamedType = NamedType {
    name: "i32",
    ty: &SdmTy::Varint(Varint::I32),
};

#[allow(unused)]
#[derive(Schema)]
enum Inner {
    Alpha,
    Beta,
    Gamma,
    Delta(i32, i16),
}

#[allow(unused)]
#[derive(Schema)]
struct Outer {
    a: u32,
    b: u64,
    c: u8,
    d: Inner,
    e: [u8; 10],
}

#[test]
fn test_enum_serialize() {
    assert_eq!(
        &NamedType {
            name: "Inner",
            ty: &SdmTy::Enum(&[
                &NamedVariant {
                    name: "Alpha",
                    ty: &SdmTy::UnitVariant
                },
                &NamedVariant {
                    name: "Beta",
                    ty: &SdmTy::UnitVariant
                },
                &NamedVariant {
                    name: "Gamma",
                    ty: &SdmTy::UnitVariant
                },
                &NamedVariant {
                    name: "Delta",
                    ty: &SdmTy::TupleVariant(&[&I32_SCHEMA, &I16_SCHEMA,])
                },
            ]),
        },
        Inner::SCHEMA
    );
}

#[test]
fn test_struct_serialize() {
    assert_eq!(
        &NamedType {
            name: "Outer",
            ty: &SdmTy::Struct(&[
                &NamedValue {
                    name: "a",
                    ty: &U32_SCHEMA
                },
                &NamedValue {
                    name: "b",
                    ty: &U64_SCHEMA
                },
                &NamedValue {
                    name: "c",
                    ty: &U8_SCHEMA
                },
                &NamedValue {
                    name: "d",
                    ty: Inner::SCHEMA
                },
                &NamedValue {
                    name: "e",
                    ty: &NamedType {
                        name: "[T; N]",
                        ty: &SdmTy::Seq(&U8_SCHEMA),
                    }
                }
            ]),
        },
        Outer::SCHEMA
    );
}