diff options
Diffstat (limited to 'src/transport.rs')
| -rw-r--r-- | src/transport.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/transport.rs b/src/transport.rs new file mode 100644 index 0000000..a5cf55d --- /dev/null +++ b/src/transport.rs @@ -0,0 +1,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, +>; |
