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}