use std::time::{Duration, SystemTime};
use serde::{Deserialize, Serialize};
use crate::PeerID;
#[derive(Debug, Deserialize, Serialize)]
pub enum PkgData<T> {
Close,
SetPeers(Vec<Option<String>>),
SetPeer(PeerID),
Data(T, PeerID), GlobalData(T), }
#[derive(Debug, Deserialize, Serialize)]
pub struct Pkg<T> {
pub sender: PeerID,
pub time: Duration, pub data: PkgData<T>,
}
impl<T> Pkg<T> {
pub fn is_from_server(&self) -> bool {
self.sender == 0
}
pub fn new(sender: PeerID, data: PkgData<T>) -> Self {
Self {
sender,
time: SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap(),
data,
}
}
pub fn as_data(&self) -> &T {
match self.data {
PkgData::Data(ref d, _) => d,
PkgData::GlobalData(ref d) => d,
_ => panic!("it isn't data"),
}
}
}