compio 0.18.0

Completion based async runtime
Documentation
use compio::{
    BufResult,
    io::{AsyncReadExt, AsyncWriteExt},
};

#[compio::main]
async fn main() {
    #[cfg(windows)]
    {
        use compio::fs::named_pipe::{ClientOptions, ServerOptions};

        const PIPE_NAME: &str = r"\\.\pipe\compio-named-pipe";

        let mut server = ServerOptions::new()
            .access_inbound(false)
            .create(PIPE_NAME)
            .unwrap();
        let mut client = ClientOptions::new()
            .write(false)
            .open(PIPE_NAME)
            .await
            .unwrap();

        server.connect().await.unwrap();

        let write = server.write_all("Hello world!");
        let buffer = Vec::with_capacity(12);
        let read = client.read_exact(buffer);

        let (BufResult(write, _), BufResult(read, buffer)) = futures_util::join!(write, read);
        write.unwrap();
        read.unwrap();
        println!("{}", String::from_utf8(buffer).unwrap());
    }
    #[cfg(unix)]
    {
        use compio::fs::pipe::OpenOptions;
        use nix::{sys::stat::Mode, unistd::mkfifo};
        use tempfile::tempdir;

        let dir = tempdir().unwrap();
        let file = dir.path().join("compio-named-pipe");

        mkfifo(&file, Mode::S_IRWXU).unwrap();
        let options = OpenOptions::new();
        let (mut rx, mut tx) =
            futures_util::try_join!(options.open_receiver(&file), options.open_sender(&file))
                .unwrap();

        let write = tx.write_all("Hello world!");
        let buffer = Vec::with_capacity(12);
        let read = rx.read_exact(buffer);

        let (BufResult(write, _), BufResult(read, buffer)) = futures_util::join!(write, read);
        write.unwrap();
        read.unwrap();
        println!("{}", String::from_utf8(buffer).unwrap());
    }
}