39 lines
992 B
Rust
39 lines
992 B
Rust
use std::fmt::Debug;
|
|
|
|
use rkyv::{Archive, Deserialize, Serialize};
|
|
|
|
#[derive(Archive, Deserialize, Serialize, PartialEq, Eq, Clone)]
|
|
pub enum MessageData {
|
|
Text(String),
|
|
Data(Vec<u8>),
|
|
}
|
|
|
|
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 }
|
|
}
|
|
}
|