#[non_exhaustive]pub enum RunError {
Spawn {
program: String,
source: Error,
},
NonZeroExit {
program: String,
args: Vec<String>,
status: ExitStatus,
stdout: Vec<u8>,
stderr: String,
},
Timeout {
program: String,
args: Vec<String>,
elapsed: Duration,
stdout: Vec<u8>,
stderr: String,
},
}Expand description
Error type for subprocess execution.
Distinguishes between:
Spawn: infrastructure failure (binary missing, fork failed, etc.)NonZeroExit: the command ran and reported failure via exit codeTimeout: the command was killed after exceeding its timeout
Marked #[non_exhaustive] so future variants can be added without breaking callers.
Match with a wildcard arm to handle unknown variants defensively.
let repo = Path::new("/repo");
let maybe_bytes = match run_git(repo, &["show", "maybe-missing-ref"]) {
Ok(output) => Some(output.stdout),
Err(RunError::NonZeroExit { .. }) => None, // ref not found
Err(e) => return Err(e.into()), // real failure bubbles up
};Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Spawn
Failed to spawn the child process. The binary may be missing, the working directory may not exist, or the OS may have refused the fork.
NonZeroExit
The child process ran but exited non-zero. For captured commands,
stdout and stderr contain what the process wrote before exiting.
For inherited commands (crate::run_cmd_inherited), they are empty.
Timeout
The child process was killed after exceeding the caller’s timeout.
Any output written to stdout/stderr before the kill signal is included
when available. The elapsed field records how long the process ran.
Implementations§
Source§impl RunError
impl RunError
Sourcepub fn exit_status(&self) -> Option<ExitStatus>
pub fn exit_status(&self) -> Option<ExitStatus>
The exit status, if the process actually ran to completion. None for spawn failures and timeouts.
Sourcepub fn is_non_zero_exit(&self) -> bool
pub fn is_non_zero_exit(&self) -> bool
Whether this error represents a non-zero exit (the command ran and reported failure).
Sourcepub fn is_spawn_failure(&self) -> bool
pub fn is_spawn_failure(&self) -> bool
Whether this error represents a spawn failure (couldn’t start the process).
Sourcepub fn is_timeout(&self) -> bool
pub fn is_timeout(&self) -> bool
Whether this error represents a timeout (process killed after exceeding its time budget).
Trait Implementations§
Source§impl Error for RunError
impl Error for RunError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()