a10 0.4.3

This library is meant as a low-level library safely exposing different OS's abilities to perform non-blocking I/O.
Documentation
use std::io;
use std::os::fd::RawFd;

use crate::kqueue::op::DirectOp;
use crate::pipe::{PipeFlag, sync_pipe2};
use crate::{AsyncFd, SubmissionQueue, fd};

pub(crate) struct PipeOp;

impl DirectOp for PipeOp {
    type Output = [AsyncFd; 2];
    type Resources = ([RawFd; 2], fd::Kind);
    type Args = PipeFlag;

    fn run(
        sq: &SubmissionQueue,
        (_, fd::Kind::File): Self::Resources,
        flags: Self::Args,
    ) -> io::Result<Self::Output> {
        sync_pipe2(flags).map(|[r, s]| [AsyncFd::new(r, sq.clone()), AsyncFd::new(s, sq.clone())])
    }
}