use std::fmt::Debug; use rkyv::{Archive, Deserialize, Serialize}; #[derive(Archive, Deserialize, Serialize, PartialEq, Eq, Clone)] pub enum MessageData { Text(String), Data(Vec), } impl Debug for MessageData { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::Text(msg_txt) => f.debug_tuple("Text").field(msg_txt).finish(), Self::Data(data) => f .debug_tuple("Data") .field(&format!("{} bytes", data.len())) .finish(), } } } #[derive(Archive, Deserialize, Serialize, Debug, PartialEq, Eq, Clone)] pub struct Message { pub description: String, pub data: MessageData, } impl Message { pub fn new(data: MessageData, desc: Option<&str>) -> Self { let description = if let Some(desc) = desc { desc.to_owned() } else { "none".to_owned() }; Message { description, data } } }