cmd_error/
lib.rs

1pub trait ErrExit {
2    type Inner;
3    fn unwrap_exit(self, error_message: &str) -> Self::Inner;
4}
5
6pub fn print_err_and_exit(error_message: &str) -> ! {
7    eprintln!("{}", error_message);
8    std::process::exit(1);
9}
10
11impl<T> ErrExit for Option<T> {
12    type Inner = T;
13    fn unwrap_exit(self, error_message: &str) -> Self::Inner {
14        match self {
15            Some(n) => n,
16            None => print_err_and_exit(error_message),
17        }
18    }   
19}
20
21impl<O, E> ErrExit for Result<O, E> {
22    type Inner = O;
23    fn unwrap_exit(self, error_message: &str) -> Self::Inner {
24        match self {
25            Ok(n) => n,
26            Err(_) => print_err_and_exit(error_message),
27        }
28    }
29}