Crate axoprocess
source ·Expand description
Nicer defaults for invoking CLI Commands.
Cmd
is a wrapper around std::process::Command
with largely the same
API except we want to be able to:
- Produce nicer errors that explain what was being run (using
thiserror
/miette
) - Log every time the command is executed (defaults
tracing::info!
) - Automatically check the return status’s
success()
(can be opted-out perCmd
)
If you like the defaults then mostly all you need to know is that Cmd::new
takes
a second argument for “what should I tell the user this Command was trying to do at
a high level”.
This lets us turn the following logic:
let mut cmd = Command::new("cargo");
cmd.arg("-V");
info!("exec {:?}", cmd);
let output = cmd.output()
.map_err(|cause| MyCmdError {
desc: "failed to get your cargo toolchain's version",
cause
})?;
if !output.status.success() {
Err(MyStatusError {
desc: "failed to get your cargo toolchain's version",
status: output.status
})?;
}
println!("version was {}", String::from_utf8_lossy(&output.stdout));
Into this:
let output = Cmd::new("cargo", "get your cargo toolchain's version")
.arg("-V")
.output()?;
println!("version was {}", String::from_utf8_lossy(&output.stdout));
Which is, a lot nicer!
Re-exports§
pub use error::*;
Modules§
- Errors!
Structs§
- A fancier Command, see the crate’s top-level docs!
Enums§
- How to log things