use async_trait::async_trait;
use tokio::{
fs::File,
io::unix::AsyncFd,
process::{ChildStderr, ChildStdin, ChildStdout},
};
use crate::MicrosandboxUtilsResult;
pub enum ChildIo {
TTY {
master_read: AsyncFd<std::fs::File>,
master_write: File,
},
Piped {
stdin: Option<ChildStdin>,
stdout: Option<ChildStdout>,
stderr: Option<ChildStderr>,
},
}
#[async_trait]
pub trait ProcessMonitor {
async fn start(&mut self, pid: u32, child_io: ChildIo) -> MicrosandboxUtilsResult<()>;
async fn stop(&mut self) -> MicrosandboxUtilsResult<()>;
}