enigma-packet 0.1.0

Canonical message packet format + serialization for Enigma secure messaging
Documentation
use bincode::config::DefaultOptions;
use bincode::Options;

use crate::error::{EnigmaPacketError, Result};
use crate::framing::{encode_frame, parse_frame};
use crate::types::Message;
use crate::validate::validate_message;

fn bincode_options() -> impl Options {
    DefaultOptions::new().with_fixint_encoding()
}

pub fn encode_message(message: &Message) -> Result<Vec<u8>> {
    validate_message(message)?;
    let body = bincode_options()
        .serialize(message)
        .map_err(|e| EnigmaPacketError::InvalidPacket(e.to_string()))?;
    encode_frame(&body, 0)
}

pub fn decode_message(packet: &[u8]) -> Result<Message> {
    let view = parse_frame(packet)?;
    let message: Message = bincode_options()
        .deserialize(view.body)
        .map_err(|e| EnigmaPacketError::DecodeError(e.to_string()))?;
    validate_message(&message)?;
    Ok(message)
}