summaryrefslogtreecommitdiff
path: root/src/transport.rs
blob: a5cf55dff390d13732e69c50761b967937934105 (plain)
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,
>;