use msgbox::IconType; fn show_error(title: &str, explanation: &str) -> ! { if cfg!(target_os = "linux") { panic!("{}: {}", title, explanation); } else { msgbox::create(title, explanation, IconType::Error); panic!(explanation.to_string()); } } pub trait ResultPanicExplanation { fn unwrap_or_explained_panic(self, title: &str, explanation: &str) -> T; } impl ResultPanicExplanation for Result { fn unwrap_or_explained_panic(self, title: &str, explanation: &str) -> T { match self { Err(error) => { let explanation = format!("{}: {}", explanation, error.to_string()); show_error(title, &explanation); }, Ok(content) => content } } } pub trait OptionPanicExplanation { fn unwrap_or_explained_panic(self, title: &str, explanation: &str) -> T; } impl OptionPanicExplanation for Option { fn unwrap_or_explained_panic(self, title: &str, explanation: &str) -> T { match self { None => { show_error(title, explanation); }, Some(content) => content } } }