use anyhow::{anyhow, Result};
use os_pipe::{PipeReader, PipeWriter};
#[derive(Debug)]
pub(crate) struct BidirectionalPipe {
pub(crate) client: Pipe,
pub(crate) host: Pipe,
}
#[derive(Debug)]
pub(crate) struct Pipe {
pub(crate) read: PipeReader,
pub(crate) write: PipeWriter,
}
pub(crate) fn bidirectional_pipe() -> Result<BidirectionalPipe> {
let (ar, bw) = os_pipe::pipe().map_err(|e| anyhow!("Failed to create pipe: {e}"))?;
let (br, aw) = os_pipe::pipe().map_err(|e| anyhow!("Failed to create pipe: {e}"))?;
Ok(BidirectionalPipe {
client: Pipe { read: ar, write: aw },
host: Pipe { read: br, write: bw },
})
}