rift-protocol 0.1.4

Versioned wire protocol framing and message types for Rift P2P
Documentation
//! Criterion benchmark for protocol frame encoding/decoding.

use criterion::{black_box, criterion_group, criterion_main, Criterion};
use rift_core::PeerId;
use rift_protocol::{ChatMessage, ControlMessage, ProtocolVersion, RiftFrameHeader, RiftPayload, StreamKind};

/// Encode + decode a representative chat frame.
fn bench_encode_decode(c: &mut Criterion) {
    let header = RiftFrameHeader {
        version: ProtocolVersion::V1,
        stream: StreamKind::Text,
        flags: 0,
        seq: 42,
        timestamp: 1700000000,
        source: PeerId([7u8; 32]),
        session: rift_protocol::SessionId::NONE,
    };
    let chat = ChatMessage::new(
        PeerId([9u8; 32]),
        1700000000,
        "hello world".to_string(),
    );
    let payload = RiftPayload::Control(ControlMessage::Chat(chat));

    c.bench_function("mesh_encode_decode", |b| {
        b.iter(|| {
            let bytes = rift_protocol::encode_frame(black_box(&header), black_box(&payload));
            let (h, p) = rift_protocol::decode_frame(black_box(&bytes)).unwrap();
            black_box(h);
            black_box(p);
        })
    });
}

criterion_group!(benches, bench_encode_decode);
criterion_main!(benches);