backtrace: Option<Arc<parking_lot::Mutex<Backtrace>>>,
}
-type EyreDynError<'r> = &'r (dyn std::error::Error + 'static);
+type DynError<'r> = &'r (dyn std::error::Error + 'static);
-impl eyre::EyreHandler for EyreDedupHandler {
+struct DisplayError<'r>(DynError<'r>);
+
+impl Display for DisplayError<'_> {
#[throws(fmt::Error)]
- fn display(&self, error: EyreDynError, f: &mut fmt::Formatter) {
+ fn fmt(&self, f: &mut fmt::Formatter) {
let mut last: Option<String> = None;
- let mut error = Some(error);
+ let mut error = Some(self.0);
while let Some(e) = error {
let m = e.to_string();
match last {
error = e.source();
}
}
+}
+
+impl eyre::EyreHandler for EyreDedupHandler {
+ #[throws(fmt::Error)]
+ fn display(&self, error: DynError, f: &mut fmt::Formatter) {
+ Display::fmt(&DisplayError(error), f)?;
+ }
#[throws(fmt::Error)]
- fn debug(&self, error: EyreDynError, f: &mut fmt::Formatter) {
+ fn debug(&self, error: DynError, f: &mut fmt::Formatter) {
if f.alternate() {
return core::fmt::Debug::fmt(error, f)?;
}