1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
use crate::{codec::Codec, context::Context, transport::Result};
pub trait PacketReceiver<Data, Uid: PartialEq>: Send + Sync {
fn recv<P: Codec<Data>>(&self, ctx: &Context<Data>) -> Result<(Uid, P)>;
}
pub trait PacketReceiverBuf<Data, Uid: PartialEq>: Send + Sync {
fn recv_buf(&self, ctx: &Context<Data>) -> Result<(Uid, Vec<u8>)>;
}
impl<Data, Uid: PartialEq, R: PacketReceiverBuf<Data, Uid>> PacketReceiver<Data, Uid> for R {
fn recv<P: Codec<Data>>(&self, ctx: &Context<Data>) -> Result<(Uid, P)> {
let (uid, bytes) = self.recv_buf(ctx)?;
let mut reader = bytes.as_slice();
let packet = P::decode(&mut reader, ctx)?;
Ok((uid, packet))
}
}
|