use std::os::fd::{AsFd, AsRawFd, BorrowedFd, RawFd};
#[cfg(windows)]
use std::os::windows::io::BorrowedSocket;
wrapper_lite::wrapper!(
#[wrapper_impl(Debug)]
#[wrapper_impl(AsRef)]
#[wrapper_impl(AsMut)]
#[wrapper_impl(BorrowMut)]
#[wrapper_impl(DerefMut)]
#[wrapper_impl(From)]
pub struct UniStream(tokio::net::TcpStream);
);
impl AsFd for UniStream {
fn as_fd(&self) -> BorrowedFd<'_> {
self.inner.as_fd()
}
}
impl AsRawFd for UniStream {
fn as_raw_fd(&self) -> RawFd {
self.inner.as_raw_fd()
}
}
#[cfg(windows)]
impl AsSocket for UniStream {
fn as_socket(&self) -> BorrowedSocket<'_> {
self.inner.as_socket()
}
}
impl TryFrom<std::net::TcpStream> for UniStream {
type Error = std::io::Error;
fn try_from(stream: std::net::TcpStream) -> Result<Self, Self::Error> {
stream.set_nonblocking(true)?;
Ok(Self::const_from(stream.try_into()?))
}
}
impl UniStream {
pub fn into_split(self) -> (OwnedReadHalf, OwnedWriteHalf) {
let (read_half, write_half) = self.inner.into_split();
(
OwnedReadHalf::const_from(read_half),
OwnedWriteHalf::const_from(write_half),
)
}
}
wrapper_lite::wrapper!(
#[wrapper_impl(Debug)]
#[wrapper_impl(AsRef)]
#[wrapper_impl(AsMut)]
#[wrapper_impl(BorrowMut)]
#[wrapper_impl(DerefMut)]
#[wrapper_impl(From)]
pub struct OwnedReadHalf(tokio::net::tcp::OwnedReadHalf);
);
wrapper_lite::wrapper!(
#[wrapper_impl(Debug)]
#[wrapper_impl(AsRef)]
#[wrapper_impl(AsMut)]
#[wrapper_impl(BorrowMut)]
#[wrapper_impl(DerefMut)]
#[wrapper_impl(From)]
pub struct OwnedWriteHalf(tokio::net::tcp::OwnedWriteHalf);
);