summaryrefslogtreecommitdiff
path: root/src/transport.rs
diff options
context:
space:
mode:
authorzirkonya <zirkonya@iridium.lan>2026-08-29 22:11:23 +0200
committerzirkonya <zirkonya@iridium.lan>2026-08-29 22:11:23 +0200
commitbf9b81e669f4ce98c8d58df5d776ae90726d7ec2 (patch)
treee0d5bdbd8a3423f1303577ddebbfa34696d336bb /src/transport.rs
parentbb41e396aca01fee9f81785681fac0a79d0fd9d8 (diff)
Add transport layer
Diffstat (limited to 'src/transport.rs')
-rw-r--r--src/transport.rs39
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,
+>;