fluvio-protocol 0.50.1

Fluvio streaming protocol
Documentation
use std::fs::read;
use std::io::Cursor;

use criterion::{criterion_group, criterion_main, Criterion};

use fluvio_protocol::{Decoder, Encoder, ByteBuf};

const EXAMPLE_WASM_FILE: &str = "fixtures/smartmodule.wasm";

fn bench_encode_vecu8(c: &mut Criterion) {
    let bytes = read(EXAMPLE_WASM_FILE).unwrap();
    let mut dest = vec![];

    c.bench_function("vecu8 encoding", |b| {
        b.iter(|| {
            bytes.encode(&mut dest, 0).unwrap();
        })
    });
}

fn bench_decode_vecu8(c: &mut Criterion) {
    let bytes = read(EXAMPLE_WASM_FILE).unwrap();
    let mut encoded = vec![];

    bytes.encode(&mut encoded, 0).unwrap();

    c.bench_function("vecu8 decoding", |b| {
        b.iter(|| {
            let mut decoded_vecu8: Vec<u8> = vec![];
            let mut cursor = Cursor::new(&encoded);

            decoded_vecu8.decode(&mut cursor, 0).unwrap();
        })
    });
}

fn bench_encode_bytebuf(c: &mut Criterion) {
    let bytes = read(EXAMPLE_WASM_FILE).unwrap();
    let bytebuf: ByteBuf = ByteBuf::from(bytes);

    c.bench_function("bytebuf encoding", |b| {
        b.iter(|| {
            let mut dest = vec![];

            bytebuf.encode(&mut dest, 0).unwrap();
        })
    });
}

fn bench_decode_bytebuf(c: &mut Criterion) {
    let mut encoded: Vec<u8> = vec![];
    let raw: Vec<u8> = read(EXAMPLE_WASM_FILE).unwrap();
    let bytebuf: ByteBuf = ByteBuf::from(raw.to_vec());

    bytebuf.encode(&mut encoded, 0).unwrap();

    c.bench_function("bytebuf decoding", |b| {
        b.iter(|| {
            let mut decoded_bytebuf: ByteBuf = ByteBuf::default();
            let mut cursor = Cursor::new(&encoded);

            decoded_bytebuf.decode(&mut cursor, 0).unwrap();
        })
    });
}

criterion_group!(
    benches,
    bench_encode_vecu8,
    bench_decode_vecu8,
    bench_encode_bytebuf,
    bench_decode_bytebuf
);
criterion_main!(benches);