die-exit 0.5.0

Handle errors and exit in command line programs easily.
Documentation
# die-exit

![GitHub](https://img.shields.io/github/license/Xavientois/die)
![GitHub Workflow Status](https://github.com/Xavientois/die/workflows/tests/badge.svg)
[![Latest Version](https://img.shields.io/crates/v/die-exit.svg)](https://crates.io/crates/die-exit)
[![Documentation](https://docs.rs/die-exit/badge.svg)](https://docs.rs/die-exit)

[die-exit] is a simple Rust library to make it easy to handle errors and exit in command line programs.
It is forked from the [die] library, but includes an additional `test` feature which will replace
exit behaviour with a call to `panic!` in order to facilitate testing.

[die]: https://code.moparisthebest.com/moparisthebest/die
[die-exit]: https://github.com/Xavientois/die

## Cargo.toml

```toml
[dependencies]
die-exit = "0.5"

[dev-dependencies.die-exit]
version = "0.5"
features = ["test", "red"]
```

## Example usage

```rust
use die_exit::*;
// Result:
Ok(1).die("no number"); // unwraps to 1 successfully
Err("failure").die("strange error"); // prints `strange error` to stderr then exits with code 1

// Option:
Some(1).die("no number"); // unwraps to 1 successfully
None.die("none option"); // prints `none option` to stderr then exits with code 1

// custom error codes:
Err("failure").die_code("strange error", 4); // prints `strange error` to stderr then exits with code 4
None.die_code("none option", 5); // prints `none option` to stderr then exits with code 5

// with function (Result only):
Err("failure").die_with(|error| format!("strange error: {}", error)); // prints `strange error: failure` to stderr then exits with code 1
Err("failure").die_with(|error| (format!("strange error: {}", error), 6)); // prints `strange error: failure` to stderr then exits with code 6

// die! macro:
die!("argument to -e must be numeric"); // prints message to stderr then exits with code 1
die!(2; "argument to -e must be numeric"); // prints message to stderr then exits with code 2
die!("argument to -e must be numeric"; 3); // prints message to stderr then exits with code 3
die!("argument {} must be {}", "-e", 1; 4); // prints `argument -e must be 1` to stderr then exits with code 4
die!("argument {} must be {}", "-e", 1); // prints `argument -e must be 1` to stderr then exits with code 1
die!(2); // prints nothing, only exits with code 3
die!(); // prints nothing, only exits with code 1
```

## Example testing

Ensure that the `test` feature is turned on.

```rust
#[cfg(test)]
mod tests {
    use super::*;
    use die_exit::*;

    #[test]
    #[should_panic]
    fn die_test() {
        die!("Die works in tests!"; exit_codes::COMPILER_ERROR);
    }
}
```

## `cargo` Features

- **test**: Turn this on if you want to run tests where `die` might be used.
  This will change the behaviour of `die` and its variants to call `panic!()`
  instead of `process::exit()`.
- **red**: Red and bold output.

## License

This project is licensed under the MIT license ([LICENSE-MIT](LICENSE-MIT)
http://opensource.org/licenses/MIT)