naia_client_socket/
packet_receiver.rs

1use super::{error::NaiaClientSocketError, server_addr::ServerAddr};
2
3/// Used to receive packets from the Client Socket
4pub trait PacketReceiver: PacketReceiverClone + Send + Sync {
5    /// Receives a packet from the Client Socket
6    fn receive(&mut self) -> Result<Option<&[u8]>, NaiaClientSocketError>;
7    /// Get the Server's Socket address
8    fn server_addr(&self) -> ServerAddr;
9}
10
11/// Used to clone Box<dyn PacketReceiver>
12pub trait PacketReceiverClone {
13    /// Clone the boxed PacketReceiver
14    fn clone_box(&self) -> Box<dyn PacketReceiver>;
15}
16
17impl<T: 'static + PacketReceiver + Clone> PacketReceiverClone for T {
18    fn clone_box(&self) -> Box<dyn PacketReceiver> {
19        Box::new(self.clone())
20    }
21}
22
23impl Clone for Box<dyn PacketReceiver> {
24    fn clone(&self) -> Box<dyn PacketReceiver> {
25        PacketReceiverClone::clone_box(self.as_ref())
26    }
27}