use std::io;
use super::{ChildStderr, ChildStdin, ChildStdout, ExitStatus};
pub struct Child {
inner: crate::sys::current::process::Child,
pub stdin: Option<ChildStdin>,
pub stdout: Option<ChildStdout>,
pub stderr: Option<ChildStderr>,
}
impl Child {
pub(crate) fn from_inner(mut inner: crate::sys::current::process::Child) -> Self {
let stdin = inner.stdin.take().map(ChildStdin::from_pipe);
let stdout = inner.stdout.take().map(ChildStdout::from_pipe);
let stderr = inner.stderr.take().map(ChildStderr::from_pipe);
Self {
inner,
stdin,
stdout,
stderr,
}
}
pub fn id(&self) -> Option<u32> {
self.inner.id()
}
pub fn try_wait(&mut self) -> io::Result<Option<ExitStatus>> {
self.inner
.try_wait()
.map(|status| status.map(ExitStatus::from_std))
}
pub async fn wait(&mut self) -> io::Result<ExitStatus> {
self.inner.wait().await.map(ExitStatus::from_std)
}
pub fn kill(&mut self) -> io::Result<()> {
self.inner.kill()
}
}