mod message; pub use message::*; use prost::Message; use sdlan_sn_rs::utils::Result; // tcp message has two-byte of size at header pub fn encode_to_tcp_message( msg: Option, packet_id: u32, packet_type: u8, ) -> Result> { let mut raw_data = Vec::new(); if let Some(msg) = msg { msg.encode(&mut raw_data)?; } let mut result = Vec::with_capacity(raw_data.len() + 7); let size = u16::to_be_bytes(raw_data.len() as u16 + 5); result.extend_from_slice(&size); result.extend_from_slice(&u32::to_be_bytes(packet_id)); result.push(packet_type); result.extend_from_slice(&raw_data); Ok(result) } // udp message has no two-byte of size at header pub fn encode_to_udp_message(msg: Option, packet_type: u8) -> Result> { let mut raw_data = Vec::new(); if let Some(msg) = msg { msg.encode(&mut raw_data)?; } let mut result = Vec::with_capacity(raw_data.len() + 1); result.push(packet_type); result.extend_from_slice(&raw_data); Ok(result) }