Crate proc_exit

Source
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, and std::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.
  • 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 and std::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, or std::io::Error
  • exit-code
    • i32 constants and helper methods
    • Doesn’t include signals
    • Doesn’t integrate with main, std::process, or std::io::Error
  • exitcode
    • i32 constants and helper methods
    • Doesn’t include signals
    • Doesn’t integrate with main, std::process, or std::io::Error
  • exitfailure
    • Allows Displayable errors to be used with ? in main()

Modules§

bash
Bash exit codes
prelude
Easy access to traits
sysexits
Support for sysexits codes

Structs§

Code
Process exit code.
Exit
Error type for exiting programs.

Traits§

WithCodeResultExt
Extension for converting errors to Exit.

Functions§

exit
Report any error message and exit.
report
Report, delegating exiting to the caller.

Type Aliases§

ExitResult
For use in fn run() -> ExitResult {}