use log::error; fn show_error(explanation: &str) -> ! { error!("{}", explanation); panic!(explanation.to_string()); } pub trait ResultPanicExplanation { fn unwrap_or_explained_panic(self, explanation: &str) -> T; } impl ResultPanicExplanation for Result { fn unwrap_or_explained_panic(self, explanation: &str) -> T { match self { Err(error) => { let explanation = format!("{}: {}", explanation, error.to_string()); show_error(&explanation); } Ok(content) => content, } } } pub trait OptionPanicExplanation { fn unwrap_or_explained_panic(self, explanation: &str) -> T; } impl OptionPanicExplanation for Option { fn unwrap_or_explained_panic(self, explanation: &str) -> T { match self { None => { show_error(explanation); } Some(content) => content, } } }