1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
use crate::transport::{
connection::Connection, listener::Listener, receiver::PacketReceiver, sender::PacketSender,
};
#[cfg(feature = "tcp")]
pub mod tcp;
#[cfg(feature = "udp")]
pub mod udp;
pub mod connection;
pub mod error;
pub mod listener;
pub mod receiver;
pub mod sender;
pub use crate::transport::error::TransportError;
pub type Result<T> = std::result::Result<T, TransportError>;
pub trait Transport<Uid = u64>: Send + Sync
where
Uid: PartialEq,
{
type Data;
type Addr;
type Sender: PacketSender<Self::Data> + Clone;
type Receiver: PacketReceiver<Self::Data, Uid>;
type Listener: Listener<Uid, Data = Self::Data, Sender = Self::Sender, Receiver = Self::Receiver>;
fn connect(&self, addr: Self::Addr) -> Result<ConnectionOf<Uid, Self>>;
fn listen(&self, addr: Self::Addr) -> Result<Self::Listener>;
}
/// Convenience alias for the [`Connection`] produced by a [`Transport`].
pub type ConnectionOf<Uid, T> = Connection<
Uid,
<T as Transport<Uid>>::Data,
<T as Transport<Uid>>::Sender,
<T as Transport<Uid>>::Receiver,
>;
|