clasp-core 4.3.0

Core types and encoding for CLASP protocol
Documentation
//! Codec benchmarks

use clasp_core::{codec, Message, SetMessage, Value};
use criterion::{black_box, criterion_group, criterion_main, Criterion};

fn encode_benchmark(c: &mut Criterion) {
    let msg = Message::Set(SetMessage {
        address: "/test/benchmark/value".to_string(),
        value: Value::Float(1.2345),
        revision: Some(1),
        lock: false,
        unlock: false,
        ttl: None,
    });

    c.bench_function("encode_set_message", |b| {
        b.iter(|| black_box(codec::encode(&msg).unwrap()))
    });
}

fn decode_benchmark(c: &mut Criterion) {
    let msg = Message::Set(SetMessage {
        address: "/test/benchmark/value".to_string(),
        value: Value::Float(1.2345),
        revision: Some(1),
        lock: false,
        unlock: false,
        ttl: None,
    });
    let encoded = codec::encode(&msg).unwrap();

    c.bench_function("decode_set_message", |b| {
        b.iter(|| black_box(codec::decode(&encoded).unwrap()))
    });
}

fn roundtrip_benchmark(c: &mut Criterion) {
    let msg = Message::Set(SetMessage {
        address: "/test/benchmark/value".to_string(),
        value: Value::Map(
            vec![
                ("key1".to_string(), Value::Int(42)),
                ("key2".to_string(), Value::String("value".to_string())),
                (
                    "key3".to_string(),
                    Value::Array(vec![Value::Int(1), Value::Int(2), Value::Int(3)]),
                ),
            ]
            .into_iter()
            .collect(),
        ),
        revision: Some(1),
        lock: false,
        unlock: false,
        ttl: None,
    });

    c.bench_function("roundtrip_complex_message", |b| {
        b.iter(|| {
            let encoded = codec::encode(&msg).unwrap();
            black_box(codec::decode(&encoded).unwrap())
        })
    });
}

criterion_group!(
    benches,
    encode_benchmark,
    decode_benchmark,
    roundtrip_benchmark
);
criterion_main!(benches);