diff options
Diffstat (limited to 'src/transport/receiver.rs')
| -rw-r--r-- | src/transport/receiver.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/transport/receiver.rs b/src/transport/receiver.rs index 3a7c948..a165110 100644 --- a/src/transport/receiver.rs +++ b/src/transport/receiver.rs @@ -3,3 +3,16 @@ 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)) + } +}
\ No newline at end of file |
