summaryrefslogtreecommitdiff
path: root/src/transport/sender.rs
blob: 3c83c6e0a87952d956264f45b60940acb23bf27f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use crate::{codec::Codec, context::Context, transport::Result};

pub trait PacketSender<Data>: Send + Sync {
    fn send<P: Codec<Data>>(&self, packet: P, ctx: &Context<Data>) -> Result<()>;
}

pub trait PacketSenderBuf<Data>: Send + Sync {
    fn send_buf(&self, buf: &[u8]) -> Result<()>;
}

impl<Data, S: PacketSenderBuf<Data>> PacketSender<Data> for S {
    fn send<P: Codec<Data>>(&self, packet: P, ctx: &Context<Data>) -> Result<()> {
        let mut buf = Vec::new();
        packet.encode(&mut buf, ctx)?;
        self.send_buf(&buf)
    }
}