selium-std 0.2.3

selium-std is a dependent crate of Selium. Do not use directly.
Documentation
use bytes::BytesMut;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use selium_std::{
    codecs::{BincodeCodec, StringCodec},
    traits::codec::{MessageDecoder, MessageEncoder},
};
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
struct StockEvent {
    ticker: String,
    change: f64,
}

impl StockEvent {
    pub fn new(ticker: &str, change: f64) -> Self {
        Self {
            ticker: ticker.to_owned(),
            change,
        }
    }
}

pub fn bincode_codec_benchmarks(c: &mut Criterion) {
    c.bench_function("bincode codec", |b| {
        b.iter(|| {
            let message = StockEvent::new("APPL", 25.5);
            let codec = BincodeCodec::default();
            let encoded = codec.encode(black_box(message)).unwrap();
            let mut encoded = BytesMut::from(&encoded[..]);
            let _ = codec.decode(black_box(&mut encoded)).unwrap();
        })
    });
}

pub fn string_codec_benchmarks(c: &mut Criterion) {
    c.bench_function("string codec", |b| {
        b.iter(|| {
            let message = "Hello, world!".to_owned();
            let codec = StringCodec::default();
            let encoded = codec.encode(black_box(message)).unwrap();
            let mut encoded = BytesMut::from(&encoded[..]);
            let _ = codec.decode(black_box(&mut encoded)).unwrap();
        })
    });
}

criterion_group!(benches, bincode_codec_benchmarks, string_codec_benchmarks,);
criterion_main!(benches);