use std::time::Duration;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("could not start `{program}`: {source}")]
Spawn {
program: String,
#[source]
source: std::io::Error,
},
#[error("`{program}` exited with code {code}")]
Exit {
program: String,
code: i32,
stderr: String,
},
#[error("`{program}` timed out after {timeout:?}")]
Timeout {
program: String,
timeout: Duration,
},
#[error("failed to parse `{program}` output: {message}")]
Parse {
program: String,
message: String,
},
#[error(transparent)]
Io(#[from] std::io::Error),
}
pub type Result<T> = std::result::Result<T, Error>;