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

Structs

  • Process exit code.
  • Error type for exiting programs.

Traits

Functions

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

Type Definitions