completeio 0.1.0

Completion based IO drivers and async runtime
Documentation
use std::collections::VecDeque;

use arrayvec::ArrayVec;
use completeio::{
    buf::IntoInner,
    driver::{AsRawFd, CompleteIo, Driver, Entry},
};

fn main() {
    let mut driver = Driver::new().unwrap();
    let file = completeio::fs::File::open("Cargo.toml").unwrap();
    driver.attach(file.as_raw_fd()).unwrap();

    let mut op = completeio::op::ReadAt::new(file.as_raw_fd(), 0, Vec::with_capacity(4096));
    let mut ops = VecDeque::from([(&mut op, 0).into()]);
    driver.push_queue(&mut ops);

    let mut entries = ArrayVec::<Entry, 1>::new();
    unsafe {
        driver
            .submit_and_wait_completed(None, &mut entries)
            .unwrap();
    }
    let entry = entries.drain(..).next().unwrap();
    assert_eq!(entry.user_data(), 0);

    let n = entry.into_result().unwrap();
    let mut buffer = op.into_inner();
    unsafe {
        buffer.set_len(n);
    }
    println!("{}", String::from_utf8(buffer).unwrap());
}