enigma_packet/
codec.rs

1use bincode::config::DefaultOptions;
2use bincode::Options;
3
4use crate::error::{EnigmaPacketError, Result};
5use crate::framing::{encode_frame, parse_frame};
6use crate::types::Message;
7use crate::validate::validate_message;
8
9fn bincode_options() -> impl Options {
10    DefaultOptions::new().with_fixint_encoding()
11}
12
13pub fn encode_message(message: &Message) -> Result<Vec<u8>> {
14    validate_message(message)?;
15    let body = bincode_options()
16        .serialize(message)
17        .map_err(|e| EnigmaPacketError::InvalidPacket(e.to_string()))?;
18    encode_frame(&body, 0)
19}
20
21pub fn decode_message(packet: &[u8]) -> Result<Message> {
22    let view = parse_frame(packet)?;
23    let message: Message = bincode_options()
24        .deserialize(view.body)
25        .map_err(|e| EnigmaPacketError::DecodeError(e.to_string()))?;
26    validate_message(&message)?;
27    Ok(message)
28}