use { crate::utils::oserror::OsError, uapi::{OwnedFd, c, pipe2}, }; pub struct Pipe { pub read: L, pub write: R, } pub fn pipe() -> Result, OsError> { let (read, write) = pipe2(c::O_CLOEXEC)?; Ok(Pipe { read, write }) } impl Pipe { pub fn map_read(self, map: impl FnOnce(L) -> Lprime) -> Pipe { Pipe { read: map(self.read), write: self.write, } } pub fn map_write(self, map: impl FnOnce(R) -> Rprime) -> Pipe { Pipe { read: self.read, write: map(self.write), } } }