use uuid::Uuid;
#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub enum VoipMessageType {
#[cfg(feature = "voice")]
VoiceMessage(u64),
#[cfg(feature = "video")]
VideoMessage(u64),
}
#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub struct VoipHeader {
voip_message_type: VoipMessageType,
author: Uuid,
}
#[derive(Debug)]
pub struct VoipPacket(pub Vec<u8>);
impl VoipHeader {
pub fn new(voip_message_type: VoipMessageType, author: Uuid) -> Self {
Self {
voip_message_type,
author,
}
}
pub fn create_message_buffer(
&self,
data: &[u8],
) -> Result<VoipPacket, Box<dyn std::error::Error>> {
let mut buffer: Vec<u8> = vec![];
let serialized_packet = rmp_serde::to_vec(self)?;
buffer.extend((serialized_packet.len() + data.len()).to_be_bytes());
buffer.extend(serialized_packet);
buffer.extend(data);
Ok(VoipPacket(buffer))
}
pub fn voip_message_type(&self) -> &VoipMessageType {
&self.voip_message_type
}
}