encoder 0.2.4

Blazing fast encoder written in Rust
Documentation
use criterion::*;
use indexmap::IndexMap;
use indexmap::IndexSet;
use encoder::json::Encode;
use std::collections::HashMap;
use std::collections::HashSet;
use std::collections::BTreeMap;
use std::collections::BTreeSet;
use std::collections::VecDeque;

fn string(c: &mut Criterion) {
    let mut buf = vec![];

    c.bench_function("char", |b| b.iter(|| {
        buf.clear();
        'z'.encode(&mut buf);
    }));

    c.bench_function("str", |b| b.iter(|| {
        buf.clear();
        "Hello".encode(&mut buf);
    }));

    let str = "Hello".to_string();
    c.bench_function("string", |b| b.iter(|| {
        buf.clear();
        str.encode(&mut buf);
    }));
}

fn option(c: &mut Criterion) {
    let mut buf = vec![];
    let opt = Some(123);

    c.bench_function("option", |b| b.iter(|| {
        buf.clear();
        opt.encode(&mut buf);
    }));
}

fn array(c: &mut Criterion) {
    let array_raw = [1, 2, 3, 4, 5];
    let array_vec = vec![1, 2, 3, 4, 5];
    let array_vec_deque = VecDeque::from(array_raw.clone());

    let mut buf = vec![];

    c.bench_function("array_raw", |b| b.iter(|| {
        buf.clear();
        array_raw.encode(&mut buf);
    }));

    c.bench_function("array_vec", |b| b.iter(|| {
        buf.clear();
        array_vec.encode(&mut buf);
    }));

    c.bench_function("array_vec_deque", |b| b.iter(|| {
        buf.clear();
        array_vec_deque.encode(&mut buf);
    }));

    let set_hash = HashSet::from(array_raw.clone());
    let set_btree = BTreeSet::from(array_raw.clone());
    let set_index = IndexSet::from(array_raw.clone());

    c.bench_function("set_hash", |b| b.iter(|| {
        buf.clear();
        set_hash.encode(&mut buf);
    }));

    c.bench_function("set_btree", |b| b.iter(|| {
        buf.clear();
        set_btree.encode(&mut buf);
    }));

    c.bench_function("set_index", |b| b.iter(|| {
        buf.clear();
        set_index.encode(&mut buf);
    }));
}

fn object(c: &mut Criterion) {
    let data = [("key1", 111), ("key2", 222), ("key3", 333)];
    let object_hash = HashMap::from(data.clone());
    let object_btree = BTreeMap::from(data.clone());
    let object_index = IndexMap::from(data.clone());

    let mut buf = vec![];

    c.bench_function("object_hash", |b| b.iter(|| {
        buf.clear();
        object_hash.encode(&mut buf);
    }));

    c.bench_function("object_btree", |b| b.iter(|| {
        buf.clear();
        object_btree.encode(&mut buf);
    }));

    c.bench_function("object_index", |b| b.iter(|| {
        buf.clear();
        object_index.encode(&mut buf);
    }));
}

criterion_group!(benches, string, option, array, object);
criterion_main!(benches);