use crate::net::Socket;
use std::io;
use std::io::{Read, Write};
use std::net::{Shutdown, TcpStream};
use std::task::{Context, Poll};
use crate::io::ReadBuf;
use async_io::Async;
impl Socket for Async<TcpStream> {
fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result<usize> {
self.get_mut().read(buf.init_mut())
}
fn try_write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.get_mut().write(buf)
}
fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
self.poll_readable(cx)
}
fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
self.poll_writable(cx)
}
fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll<io::Result<()>> {
Poll::Ready(self.get_mut().shutdown(Shutdown::Both))
}
}
#[cfg(unix)]
impl Socket for Async<std::os::unix::net::UnixStream> {
fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result<usize> {
self.get_mut().read(buf.init_mut())
}
fn try_write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.get_mut().write(buf)
}
fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
self.poll_readable(cx)
}
fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
self.poll_writable(cx)
}
fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll<io::Result<()>> {
Poll::Ready(self.get_mut().shutdown(Shutdown::Both))
}
}