ruyi 0.1.6

An event-driven framework for non-blocking, asynchronous I/O in Rust
Documentation
mod sys;

mod poll;
pub use self::poll::{Ops, Token, Event, Pollable, Poller};

mod awakener;
pub use self::awakener::*;

use std::io;

#[repr(C)]
#[derive(Debug)]
pub struct IoVec {
    inner: sys::IoVec,
}

impl IoVec {
    #[inline]
    pub fn from_mut(base: &mut u8, len: usize) -> Self {
        IoVec {
            inner: sys::IoVec::from_mut(base, len),
        }
    }

    #[inline]
    pub fn from(base: &u8, len: usize) -> Self {
        IoVec {
            inner: sys::IoVec::from(base, len),
        }
    }
}

pub trait ReadV {
    fn readv(&mut self, iovs: &[IoVec]) -> io::Result<usize>;
}

pub trait WriteV {
    fn writev(&mut self, iovs: &[IoVec]) -> io::Result<usize>;
}

impl<'a, R: ReadV> ReadV for &'a mut R {
    #[inline]
    fn readv(&mut self, iovs: &[IoVec]) -> io::Result<usize> {
        ReadV::readv(*self, iovs)
    }
}

impl<'a, W: WriteV> WriteV for &'a mut W {
    #[inline]
    fn writev(&mut self, iovs: &[IoVec]) -> io::Result<usize> {
        WriteV::writev(*self, iovs)
    }
}

mod tcp;
pub use self::tcp::*;