use wireframe::{
app::{Envelope, Packet},
correlation::CorrelatableFrame,
serializer::{BincodeSerializer, Serializer},
};
#[derive(Debug, Clone, Copy, Default)]
pub enum ServerMode {
#[default]
Echo,
Mismatch,
}
#[must_use]
pub fn process_frame(mode: ServerMode, bytes: &[u8]) -> Option<Vec<u8>> {
let (envelope, _): (Envelope, usize) = BincodeSerializer.deserialize(bytes).ok()?;
let response = match mode {
ServerMode::Echo => envelope,
ServerMode::Mismatch => {
let wrong_id = envelope.correlation_id().map(|id| id.wrapping_add(999));
let parts = envelope.into_parts();
Envelope::new(parts.id(), wrong_id, parts.into_payload())
}
};
BincodeSerializer.serialize(&response).ok()
}