1use std::time::{Duration, SystemTime};
2
3use serde::{Deserialize, Serialize};
4
5use crate::PeerID;
6
7#[derive(Debug, Deserialize, Serialize)]
8pub enum PkgData<T> {
9 Close,
10 SetPeers(Vec<Option<String>>),
11 SetPeer(PeerID),
12 Data(T, PeerID), GlobalData(T), }
15
16#[derive(Debug, Deserialize, Serialize)]
17pub struct Pkg<T> {
18 pub sender: PeerID,
19 pub time: Duration, pub data: PkgData<T>,
21}
22
23impl<T> Pkg<T> {
24 pub fn is_from_server(&self) -> bool {
25 self.sender == 0
26 }
27
28 pub fn new(sender: PeerID, data: PkgData<T>) -> Self {
29 Self {
30 sender,
31 time: SystemTime::now()
32 .duration_since(std::time::UNIX_EPOCH)
33 .unwrap(),
34 data,
35 }
36 }
37
38 pub fn as_data(&self) -> &T {
39 match self.data {
40 PkgData::Data(ref d, _) => d,
41 PkgData::GlobalData(ref d) => d,
42 _ => panic!("it isn't data"),
43 }
44 }
45}