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)
}