use netmod::{Frame, Target};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub(crate) enum Envelope {
Announce,
Reply,
Data(Vec<u8>),
}
impl Envelope {
pub(crate) fn frame(f: &Frame) -> Vec<u8> {
let inner = bincode::serialize(f).unwrap();
let env = Envelope::Data(inner);
bincode::serialize(&env).unwrap()
}
pub(crate) fn get_frame(&self) -> Frame {
match self {
Self::Data(ref vec) => bincode::deserialize(vec).unwrap(),
_ => unreachable!(),
}
}
pub(crate) fn announce() -> Vec<u8> {
let env = Envelope::Announce;
bincode::serialize(&env).unwrap()
}
pub(crate) fn reply() -> Vec<u8> {
let env = Envelope::Reply;
bincode::serialize(&env).unwrap()
}
pub(crate) fn as_bytes(&self) -> Vec<u8> {
bincode::serialize(self).unwrap()
}
pub(crate) fn from_bytes(vec: &Vec<u8>) -> Self {
bincode::deserialize(&vec).unwrap()
}
}
#[derive(Debug, Clone)]
pub(crate) struct FrameExt(pub(crate) Frame, pub(crate) Target);