#![deny(missing_docs, warnings)]
extern crate kernel32;
extern crate libc;
extern crate time;
extern crate winapi;
#[macro_use] extern crate cfg_if;
use std::fmt;
use std::io;
use std::process::Child;
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
pub struct ExitStatus(imp::ExitStatus);
#[cfg(unix)] #[path = "unix/mod.rs"]
mod imp;
#[cfg(windows)] #[path = "windows.rs"]
mod imp;
pub trait ChildExt {
fn wait_timeout_ms(&mut self, ms: u32) -> io::Result<Option<ExitStatus>>;
}
impl ChildExt for Child {
fn wait_timeout_ms(&mut self, ms: u32) -> io::Result<Option<ExitStatus>> {
imp::wait_timeout_ms(self, ms).map(|m| m.map(ExitStatus))
}
}
impl ExitStatus {
pub fn success(&self) -> bool {
self.0.success()
}
pub fn code(&self) -> Option<i32> {
self.0.code()
}
pub fn unix_signal(&self) -> Option<i32> {
self.0.unix_signal()
}
}
impl fmt::Display for ExitStatus {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
if let Some(c) = self.code() {
write!(f, "exit code: {}", c)
} else if let Some(s) = self.unix_signal() {
write!(f, "signal: {}", s)
} else {
write!(f, "exit status: unknown")
}
}
}