use std::io::{Read, Write};
use std::os::fd::RawFd;
use std::time::Duration;
pub(crate) trait HttpStream: Read + Write + Send {
fn raw_fd(&self) -> RawFd;
fn set_read_timeout(&mut self, dur: Option<Duration>) -> std::io::Result<()>;
fn set_write_timeout(&mut self, dur: Option<Duration>) -> std::io::Result<()>;
}
impl HttpStream for may::net::TcpStream {
fn raw_fd(&self) -> RawFd {
use std::os::fd::AsRawFd;
self.as_raw_fd()
}
fn set_read_timeout(&mut self, dur: Option<Duration>) -> std::io::Result<()> {
may::net::TcpStream::set_read_timeout(self, dur)
}
fn set_write_timeout(&mut self, dur: Option<Duration>) -> std::io::Result<()> {
may::net::TcpStream::set_write_timeout(self, dur)
}
}
impl HttpStream for rustls::StreamOwned<rustls::ClientConnection, may::net::TcpStream> {
fn raw_fd(&self) -> RawFd {
use std::os::fd::AsRawFd;
self.sock.as_raw_fd()
}
fn set_read_timeout(&mut self, dur: Option<Duration>) -> std::io::Result<()> {
self.sock.set_read_timeout(dur)
}
fn set_write_timeout(&mut self, dur: Option<Duration>) -> std::io::Result<()> {
self.sock.set_write_timeout(dur)
}
}
pub(crate) type Conn = Box<dyn HttpStream + Send>;