serde-smile 0.3.1

A Smile implementation for Serde
Documentation
use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fmt::{self, Debug, Display};
use std::hash::Hash;
use std::iter::FromIterator;
use uuid::Uuid;

fn run_test<T>(key: T)
where
    T: Display + Serialize + DeserializeOwned + PartialEq + Eq + Debug + Hash,
{
    let expected_bytes =
        crate::to_vec(&HashMap::<_, _>::from_iter([(key.to_string(), "a")])).unwrap();

    let expected = HashMap::<_, _>::from_iter([(key, "a")]);
    let actual_bytes = crate::to_vec(&expected).unwrap();
    assert_eq!(expected_bytes, actual_bytes);

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

#[test]
fn u8_keys() {
    run_test(1u8);
}

#[test]
fn u16_keys() {
    run_test(1u16);
}

#[test]
fn u32_keys() {
    run_test(1u32);
}

#[test]
fn u64_keys() {
    run_test(1u64);
}

#[test]
fn u128_keys() {
    run_test(1u128);
}

#[test]
fn i8_keys() {
    run_test(1i8);
}

#[test]
fn i16_keys() {
    run_test(1i16);
}

#[test]
fn i32_keys() {
    run_test(1i32);
}

#[test]
fn i64_keys() {
    run_test(1i64);
}

#[test]
fn i128_keys() {
    run_test(1i128);
}

#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Debug)]
enum TestEnum {
    Variant,
}

impl Display for TestEnum {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            TestEnum::Variant => f.write_str("Variant"),
        }
    }
}

#[test]
fn enum_keys() {
    run_test(TestEnum::Variant);
}

#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Debug)]
struct TestNewtype(String);

impl Display for TestNewtype {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str(&self.0)
    }
}

#[test]
fn newtype_keys() {
    run_test(TestNewtype("hello".to_string()))
}

#[test]
fn uuid_keys() {
    run_test(Uuid::nil())
}