1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use std::fmt::Write;


pub fn setup() {
    if cfg!(release) {
        std::panic::set_hook(box |info| {
            if cfg!(detailed_panic) {
                let mut message = "program panicked".to_owned();

                if let Some(location) = info.location() {
                    write!(&mut message, " at {}:{}", location.file(), location.line()).ok();
                }

                if let Some(payload) = info.payload().downcast_ref::<&str>() {
                    write!(&mut message, " with payload: {}", payload).ok();
                }

                println!("{}", message);
            }

            std::process::exit(-1);
        });
    }
}