2 unstable releases
0.2.0 | Feb 16, 2024 |
---|---|
0.1.0 | Jan 5, 2024 |
#429 in Testing
7,534 downloads per month
Used in 11 crates
(4 directly)
17KB
253 lines
axoprocess
Nicer defaults for invoking CLI Commands.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or opensource.org/licenses/MIT)
at your option.
lib.rs
:
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!
Dependencies
~2–2.7MB
~46K SLoC