zerompk 0.7.1

A zero-copy, zero-dependency, no_std-compatible, extremely fast MessagePack serializer for Rust.
Documentation
#![feature(test)]
extern crate test;

use serde::{Deserialize, Serialize};
use zerompk_derive::{FromMessagePack, ToMessagePack};

#[derive(Serialize, Deserialize, ToMessagePack, FromMessagePack)]
pub struct NoCopy<'a> {
    pub str: &'a str,
    #[serde(with = "serde_bytes")]
    pub bin: &'a [u8],
}

#[bench]
fn serialize_zero_copy_zerompk(b: &mut test::Bencher) {
    let value = NoCopy {
        str: "hello, world!!",
        bin: &[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
    };
    let mut buf = vec![0; 64];
    b.iter(|| {
        for _ in 0..1000 {
            zerompk::to_msgpack(&value, &mut buf).unwrap();
        }
    });
}

#[bench]
fn serialize_zero_copy_rmp_serde(b: &mut test::Bencher) {
    let value = NoCopy {
        str: "hello, world!!",
        bin: &[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
    };
    let mut buf = vec![0; 64];
    b.iter(|| {
        for _ in 0..1000 {
            value
                .serialize(&mut rmp_serde::Serializer::new(&mut buf))
                .unwrap();
        }
    });
}

#[bench]
fn deserialize_zero_copy_zerompk(b: &mut test::Bencher) {
    let value = NoCopy {
        str: "hello, world!!",
        bin: &[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
    };
    let msgpack = zerompk::to_msgpack_vec(&value).unwrap();
    b.iter(|| {
        let data = test::black_box(&msgpack);
        for _ in 0..1000 {
            let deserialized: NoCopy = zerompk::from_msgpack(data).unwrap();
            test::black_box(deserialized);
        }
    });
}

#[bench]
fn deserialize_zero_copy_rmp_serde(b: &mut test::Bencher) {
    let value = NoCopy {
        str: "hello, world!!",
        bin: &[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
    };
    let msgpack = rmp_serde::to_vec(&value).unwrap();
    b.iter(|| {
        let data = test::black_box(&msgpack);
        for _ in 0..1000 {
            let deserialized: NoCopy = rmp_serde::from_slice(data).unwrap();
            test::black_box(deserialized);
        }
    });
}