pub enum RunError {
Spawn {
program: String,
source: Error,
},
NonZeroExit {
program: String,
args: Vec<String>,
status: ExitStatus,
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 code
Callers that want to treat non-zero exits as legitimate in-band signals
(e.g., git show <nonexistent-ref> returning “not found”) can pattern-match:
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§
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.
Implementations§
Source§impl RunError
impl RunError
Sourcepub fn stderr(&self) -> Option<&str>
pub fn stderr(&self) -> Option<&str>
The captured stderr, if any. Empty for spawn failures and inherited commands.
Sourcepub fn exit_status(&self) -> Option<ExitStatus>
pub fn exit_status(&self) -> Option<ExitStatus>
The exit status, if the process actually ran.
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).
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()