completeio 0.1.0

Completion based IO drivers and async runtime
Documentation
use std::{collections::VecDeque, io, time::Duration};

use arrayvec::ArrayVec;
use completeio::{
    driver::{AsRawFd, CompleteIo, Driver, Entry},
    fs::File,
    op::ReadAt,
};

#[test]
fn cancel_before_poll() {
    let mut driver = Driver::new().unwrap();

    let file = File::open("Cargo.toml").unwrap();
    driver.attach(file.as_raw_fd()).unwrap();

    driver.try_cancel(0).unwrap();

    let mut op = ReadAt::new(file.as_raw_fd(), 0, Vec::with_capacity(8));
    let mut ops = VecDeque::from([(&mut op, 0).into()]);
    driver.push_queue(&mut ops);
    let mut entries = ArrayVec::<Entry, 1>::new();

    let res =
        unsafe { driver.submit_and_wait_completed(Some(Duration::from_secs(1)), &mut entries) };
    assert!(res.is_ok() || res.unwrap_err().kind() == io::ErrorKind::TimedOut);
}