Expand description
Features
i32
newtype for exit codes- Can represent any valid exit code
- Type safe, operations are restricted to what is valid for exit codes
- Includes common exit codes and signal exit codes
- Integrate with
main
,std::process
, andstd::io::Error
- Supports exiting silently (error message reported through another means)
Install
Add to your Cargo.toml
:
$ cargo add proc-exit
Example
use proc_exit::prelude::*;
fn main() {
// Simple but Macro-less `main`
// - Fast compiles
// - Composable with other features
let result = run();
proc_exit::exit(result);
}
fn run() -> proc_exit::ExitResult {
// Integrates directly with `std::io::Error`, returning the right exit code.
let exit_status = std::process::Command::new("true")
.status().with_code(proc_exit::Code::FAILURE)?;
// Can pass `Command` exit codes right up, when appropriate
proc_exit::Code::from_status(exit_status).ok()?;
proc_exit::Code::SUCCESS.ok()
}
Relevant CLI crates
Other crates that might be useful in testing command line programs.
- duct for orchestrating multiple processes.
- or commandspec for easier writing of commands
- rexpect for controlling interactive programs.
assert_cmd
can be reused to simplify controlling CLIs
Alternative crates
Crates considered when making this one include:
- sysexit
- Uses an enum, making certain states unrepresentable
- Includes signals
- Integrates with
std::process
andstd::io::Error
- Doesn’t integrate with
main
- sysexits
- Uses an enum, making certain states unrepresentable
- Doesn’t include signals
- Doesn’t integrate with
main
,std::process
, orstd::io::Error
- exit-code
i32
constants and helper methods- Doesn’t include signals
- Doesn’t integrate with
main
,std::process
, orstd::io::Error
- exitcode
i32
constants and helper methods- Doesn’t include signals
- Doesn’t integrate with
main
,std::process
, orstd::io::Error
- exitfailure
- Allows
Display
able errors to be used with?
inmain()
- Allows
Modules
- Bash exit codes
- Easy access to traits
- Support for sysexits codes
Structs
- Process exit code.
- Error type for exiting programs.
Traits
- Extension for converting errors to
Exit
.
Functions
- Report any error message and exit.
- Report, delegating exiting to the caller.
Type Definitions
- For use in
fn run() -> ExitResult {}