use std::fs::File;
use std::io::{self, Read, Write};
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
use crate::event::{Evented, EventedId};
use crate::poll::{Interests, PollOption, Poller};
use crate::sys::unix::EventedFd;
#[derive(Debug)]
pub struct EventedIo {
fd: File,
}
impl FromRawFd for EventedIo {
unsafe fn from_raw_fd(fd: RawFd) -> EventedIo {
EventedIo { fd: File::from_raw_fd(fd) }
}
}
impl IntoRawFd for EventedIo {
fn into_raw_fd(self) -> RawFd {
self.fd.into_raw_fd()
}
}
impl AsRawFd for EventedIo {
fn as_raw_fd(&self) -> RawFd {
self.fd.as_raw_fd()
}
}
impl Evented for EventedIo {
fn register(&mut self, poller: &mut Poller, id: EventedId, interests: Interests, opt: PollOption) -> io::Result<()> {
EventedFd(&self.as_raw_fd()).register(poller, id, interests, opt)
}
fn reregister(&mut self, poller: &mut Poller, id: EventedId, interests: Interests, opt: PollOption) -> io::Result<()> {
EventedFd(&self.as_raw_fd()).reregister(poller, id, interests, opt)
}
fn deregister(&mut self, poller: &mut Poller) -> io::Result<()> {
EventedFd(&self.as_raw_fd()).deregister(poller)
}
}
impl Read for EventedIo {
fn read(&mut self, dst: &mut [u8]) -> io::Result<usize> {
(&self.fd).read(dst)
}
}
impl Write for EventedIo {
fn write(&mut self, src: &[u8]) -> io::Result<usize> {
(&self.fd).write(src)
}
fn flush(&mut self) -> io::Result<()> {
(&self.fd).flush()
}
}