pub trait SyncDataStream {
type NetStream;
type Error: Error;
// Required methods
fn new(
stream: Self::NetStream,
header: StreamHeader,
remote_addr: SocketAddr,
) -> Result<Self, Self::Error>
where Self: Sized;
fn socket_addr(&self) -> SocketAddr;
fn header(&self) -> &StreamHeader;
// Provided method
fn addr(&self) -> IpAddr { ... }
}