use tokio::process::{ChildStdin, ChildStdout};
use crate::error::AdapterError;
use crate::supervision::{IoPlan, StdioKind, SupervisedChild};
pub const PROTOCOL_IO: IoPlan = IoPlan {
stdin: StdioKind::Piped,
stdout: StdioKind::Piped,
stderr: StdioKind::Piped,
};
pub fn protocol_halves(
child: &mut SupervisedChild,
) -> Result<(ChildStdin, ChildStdout, Option<tokio::process::ChildStderr>), AdapterError> {
let stdin = child
.stdin()
.ok_or_else(|| AdapterError::permanent("agent_pipe_unavailable", "process/stdio"))?;
let stdout = child
.stdout()
.ok_or_else(|| AdapterError::permanent("agent_pipe_unavailable", "process/stdio"))?;
Ok((stdin, stdout, child.stderr()))
}