use crate::error::Result;
use crate::protocol::message::{IgtlMessage, Message};
use tracing::{debug, trace, warn};
#[inline]
#[allow(dead_code)]
pub(crate) fn encode_message<T: Message>(msg: &IgtlMessage<T>) -> Result<Vec<u8>> {
let data = msg.encode()?;
let msg_type = msg.header.type_name.as_str().unwrap_or("UNKNOWN");
let device_name = msg.header.device_name.as_str().unwrap_or("UNKNOWN");
debug!(
msg_type = msg_type,
device_name = device_name,
size = data.len(),
"Encoding message"
);
trace!(
msg_type = msg_type,
bytes = data.len(),
"Message encoded successfully"
);
Ok(data)
}
#[inline]
#[allow(dead_code)]
pub(crate) fn decode_message<T: Message>(data: &[u8], verify_crc: bool) -> Result<IgtlMessage<T>> {
let result = IgtlMessage::decode_with_options(data, verify_crc);
match &result {
Ok(msg) => {
let msg_type = msg.header.type_name.as_str().unwrap_or("UNKNOWN");
let device_name = msg.header.device_name.as_str().unwrap_or("UNKNOWN");
debug!(
msg_type = msg_type,
device_name = device_name,
"Message decoded successfully"
);
trace!(
msg_type = msg_type,
device_name = device_name,
body_size = msg.header.body_size,
"Decoding completed"
);
}
Err(e) => {
warn!(
error = %e,
"Failed to decode message"
);
}
}
result
}