1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use colored::Colorize;

pub trait BeautifulErrors<T> {
    fn expect_or_err(self, msg: &str) -> T;
}

impl<T> BeautifulErrors<T> for Option<T> {
    fn expect_or_err(self, msg: &str) -> T {
        match self {
            Some(val) => val,
            None => {
                println!("{}", msg.red().bold());
                std::process::abort();
            }
        }
    }
}

impl<T, E> BeautifulErrors<T> for Result<T, E> {
    fn expect_or_err(self, msg: &str) -> T {
        match self {
            Ok(val) => val,
            Err(_) => {
                println!("{}", msg.red().bold());
                std::process::abort();
            }
        }
    }
}

pub fn panic_err(msg: &str) -> ! {
    println!("{}", msg.red().bold());
    std::process::abort();
}