karyon_net/
listener.rs

1use std::result::Result;
2
3use async_trait::async_trait;
4
5use crate::{Conn, Endpoint};
6
7/// Alias for `Box<dyn ConnListener>`
8pub type Listener<C, E> = Box<dyn ConnListener<Message = C, Error = E>>;
9
10/// A trait for objects which can be converted to [`Listener`].
11pub trait ToListener {
12    type Message;
13    type Error;
14    fn to_listener(self) -> Listener<Self::Message, Self::Error>;
15}
16
17/// ConnListener is a generic network listener interface for
18/// [`tcp::TcpConn`], [`tls::TlsConn`], [`ws::WsConn`], and [`unix::UnixConn`].
19#[async_trait]
20pub trait ConnListener: Send + Sync {
21    type Message;
22    type Error;
23    fn local_endpoint(&self) -> Result<Endpoint, Self::Error>;
24    async fn accept(&self) -> Result<Conn<Self::Message, Self::Error>, Self::Error>;
25}