zerompk 0.7.0

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

mod common;

use common::Point;
use serde::Serialize;

const N: usize = 1000;

#[bench]
fn serialize_large_array_zerompk(b: &mut test::Bencher) {
    let points: Vec<Point> = (0..1000).map(|i| Point { x: i, y: i * 2 }).collect();
    let mut buf = vec![0; 16 * 1024];
    b.iter(|| {
        for _ in 0..N {
            let len = zerompk::to_msgpack(test::black_box(&points), &mut buf).unwrap();
            test::black_box(&buf[..len]);
        }
    });
}

#[bench]
fn serialize_large_array_zerompk_vec(b: &mut test::Bencher) {
    let points: Vec<Point> = (0..1000).map(|i| Point { x: i, y: i * 2 }).collect();
    b.iter(|| {
        for _ in 0..N {
            let output = zerompk::to_msgpack_vec(test::black_box(&points)).unwrap();
            test::black_box(output);
        }
    });
}

#[bench]
fn serialize_large_array_rmp_serde(b: &mut test::Bencher) {
    let points: Vec<Point> = (0..1000).map(|i| Point { x: i, y: i * 2 }).collect();
    let mut buf = vec![0; 16 * 1024];
    b.iter(|| {
        for _ in 0..N {
            buf.clear();
            points
                .serialize(&mut rmp_serde::Serializer::new(&mut buf))
                .unwrap();
            test::black_box(&buf);
        }
    });
}

#[bench]
fn serialize_large_array_msgpacker(b: &mut test::Bencher) {
    let points: Vec<Point> = (0..1000).map(|i| Point { x: i, y: i * 2 }).collect();
    let mut buf = vec![0; 16 * 1024];
    b.iter(|| {
        for _ in 0..N {
            buf.clear();
            msgpacker::pack_array(&mut buf, &points);
            test::black_box(&buf);
        }
    });
}

#[bench]
fn serialize_large_array_serde_json(b: &mut test::Bencher) {
    let points: Vec<Point> = (0..1000).map(|i| Point { x: i, y: i * 2 }).collect();
    let mut buf = Vec::new();
    b.iter(|| {
        for _ in 0..N {
            buf.clear();
            serde_json::to_writer(&mut buf, &points).unwrap();
            test::black_box(&buf);
        }
    });
}