use bstr::BString;
use crate::driver::State;
#[derive(Debug, Copy, Clone)]
pub enum Mode {
WaitForProcesses,
Ignore,
}
impl State {
pub fn shutdown(self, mode: Mode) -> Result<Vec<(BString, Option<std::process::ExitStatus>)>, std::io::Error> {
let mut out = Vec::with_capacity(self.running.len());
for (cmd, client) in self.running {
match mode {
Mode::WaitForProcesses => {
let mut child = client.into_child();
let status = child.wait()?;
out.push((cmd, Some(status)));
}
Mode::Ignore => {
out.push((cmd, None));
}
}
}
Ok(out)
}
}