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 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

Some crates that fill a similar role include:

  • sysexit
    • Uses an enum, making certain states unrepresentable
    • Includes signals
    • Integrates with std::process and std::io::Error
    • Doesn’t integrate with main
  • 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

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 {}