1use std::fmt::Debug;
2
3use bitflags::Flags;
4use serde::{Deserialize, Serialize};
5
6pub trait AsPacketKind: Flags + Clone + Copy + Debug + Send + Sync {}
7
8pub trait AsPacketSend: Serialize + Send + Sync {}
9
10pub trait AsPacketRecv<'a, K: AsPacketKind>: Deserialize<'a> + Send + Sync {
11 fn kind(&self) -> K;
12}
13
14pub trait AsPacket<'a, K: AsPacketKind>: AsPacketSend + AsPacketRecv<'a, K> + Send + Sync
15where
16 Self::Kind: AsPacketKind,
17{
18 type Kind;
19}
20
21impl<'a, K: AsPacketKind, T: AsPacketSend + AsPacketRecv<'a, K>> AsPacket<'a, K> for T {
22 type Kind = K;
23}