serde-smile 0.1.3

A Smile implementation for Serde
Documentation
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
enum TestEnum {
    Unit,
    Newtype(i32),
    Tuple(i32, bool),
    Struct { a: i32, b: bool },
}

#[derive(Serialize)]
struct NewtypeEquivalent {
    #[serde(rename = "Newtype")]
    newtype: i32,
}

#[derive(Serialize)]
struct TupleEquivalent {
    #[serde(rename = "Tuple")]
    tuple: (i32, bool),
}

#[derive(Serialize)]
struct StructEquivalent {
    #[serde(rename = "Struct")]
    struct_: StructEquivalentInner,
}

#[derive(Serialize)]
struct StructEquivalentInner {
    a: i32,
    b: bool,
}

#[test]
fn unit_variant() {
    let expected = TestEnum::Unit;

    let expected_bytes = crate::to_vec("Unit").unwrap();
    let actual_bytes = crate::to_vec(&expected).unwrap();
    assert_eq!(expected_bytes, actual_bytes);

    let actual = crate::from_slice::<TestEnum>(&expected_bytes).unwrap();
    assert_eq!(expected, actual);
}

#[test]
fn newtype_variant() {
    let expected = TestEnum::Newtype(42);

    let expected_bytes = crate::to_vec(&NewtypeEquivalent { newtype: 42 }).unwrap();
    let actual_bytes = crate::to_vec(&expected).unwrap();
    assert_eq!(expected_bytes, actual_bytes);

    let actual = crate::from_slice::<TestEnum>(&expected_bytes).unwrap();
    assert_eq!(expected, actual);
}

#[test]
fn tuple_variant() {
    let expected = TestEnum::Tuple(42, true);

    let expected_bytes = crate::to_vec(&TupleEquivalent { tuple: (42, true) }).unwrap();
    let actual_bytes = crate::to_vec(&expected).unwrap();
    assert_eq!(expected_bytes, actual_bytes);

    let actual = crate::from_slice::<TestEnum>(&expected_bytes).unwrap();
    assert_eq!(expected, actual);
}

#[test]
fn struct_variant() {
    let expected = TestEnum::Struct { a: 42, b: true };

    let expected_bytes = crate::to_vec(&StructEquivalent {
        struct_: StructEquivalentInner { a: 42, b: true },
    })
    .unwrap();
    let actual_bytes = crate::to_vec(&expected).unwrap();
    assert_eq!(expected_bytes, actual_bytes);

    let actual = crate::from_slice::<TestEnum>(&expected_bytes).unwrap();
    assert_eq!(expected, actual);
}