wasm-msgpack 0.6.2

MessagePack serialization implementation for Rust optimized for WebAssembly environments
Documentation
use serde::{de::DeserializeOwned, Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[must_use]
pub enum TestEnum {
    Empty,
    NewType(String),
    StructType { inner: String },
}

#[test]
fn enum_simple() {
    let expected = TestEnum::Empty;
    assert_rt(&expected);
}
#[test]
fn enum_newtype() {
    let expected = TestEnum::NewType("HelloWorld".to_owned());
    assert_rt(&expected);
}
#[test]
fn enum_structtype() {
    let expected = TestEnum::StructType {
        inner: "HelloWorld".to_owned(),
    };
    assert_rt(&expected);
}

fn assert_rt<T>(expected: &T)
where
    T: ?Sized + Serialize + DeserializeOwned + std::fmt::Debug + PartialEq + 'static,
{
    let our_bytes = serialize(expected);
    let our_str = our_bytes
        .iter()
        .map(|a| String::from_utf8(vec![*a]).unwrap_or_else(|_| format!("\\{:02x?}", *a)))
        .collect::<Vec<String>>()
        .join("");
    println!("our_bytes: {}", our_str);
    let actual: T = wasm_msgpack::decode::from_slice(&our_bytes).unwrap();
    assert_eq!(expected, &actual);
}

fn serialize<T>(item: &T) -> Vec<u8>
where
    T: ?Sized + Serialize,
{
    let mut buf = [0; 1024 * 100];
    let written = wasm_msgpack::encode::serde::to_array(item, &mut buf).unwrap();
    buf[0..written].to_vec()
}