use crate::{MeetingState, Result, SessionId, SessionState};
#[derive(Debug)]
pub enum Event {
ServerConnected {
server_key: Vec<u8>,
},
PeerConnected {
peer_key: Vec<u8>,
},
BinaryMessage {
peer_key: Vec<u8>,
message: Vec<u8>,
session_id: Option<SessionId>,
},
JsonMessage {
peer_key: Vec<u8>,
message: JsonMessage,
session_id: Option<SessionId>,
},
MeetingCreated(MeetingState),
MeetingReady(MeetingState),
SessionCreated(SessionState),
SessionReady(SessionState),
SessionActive(SessionState),
SessionTimeout(SessionId),
SessionFinished(SessionId),
Close,
}
#[derive(Debug)]
pub struct JsonMessage {
contents: Vec<u8>,
}
impl From<Vec<u8>> for JsonMessage {
fn from(contents: Vec<u8>) -> Self {
Self { contents }
}
}
impl JsonMessage {
pub fn serialize<T: serde::ser::Serialize>(
value: &T,
) -> Result<Vec<u8>> {
Ok(serde_json::to_vec(value)?)
}
pub fn deserialize<'a, T: serde::de::Deserialize<'a>>(
&'a self,
) -> Result<T> {
Ok(serde_json::from_slice::<T>(&self.contents)?)
}
}