use std::fmt;
pub mod tls;
pub use self::tls::HasTlsConnectionInfo;
pub use self::tls::TlsConnectionInfo;
#[cfg(feature = "duplex")]
#[doc(hidden)]
pub use crate::stream::duplex::DuplexAddr;
#[doc(hidden)]
pub use crate::stream::unix::UnixAddr;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ConnectionInfo<Addr> {
pub local_addr: Addr,
pub remote_addr: Addr,
}
impl<Addr> Default for ConnectionInfo<Addr>
where
Addr: Default,
{
fn default() -> Self {
Self {
local_addr: Addr::default(),
remote_addr: Addr::default(),
}
}
}
#[cfg(feature = "duplex")]
impl ConnectionInfo<DuplexAddr> {
pub fn duplex() -> Self {
Self::default()
}
}
impl<Addr> ConnectionInfo<Addr> {
pub fn local_addr(&self) -> &Addr {
&self.local_addr
}
pub fn remote_addr(&self) -> &Addr {
&self.remote_addr
}
pub fn map<T, F>(self, f: F) -> ConnectionInfo<T>
where
F: Fn(Addr) -> T,
{
ConnectionInfo {
local_addr: f(self.local_addr),
remote_addr: f(self.remote_addr),
}
}
}
pub trait HasConnectionInfo {
type Addr: fmt::Display + fmt::Debug + Send;
fn info(&self) -> ConnectionInfo<Self::Addr>;
}