From e997e4245d397ae620e2efbc2585cd815964310e Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 8 Jan 2023 12:20:31 +0000 Subject: [PATCH] Introduce DisplayError Signed-off-by: Ian Jackson --- src/reporter.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/reporter.rs b/src/reporter.rs index dc8a575..17441d8 100644 --- a/src/reporter.rs +++ b/src/reporter.rs @@ -211,13 +211,15 @@ struct EyreDedupHandler { backtrace: Option>>, } -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 = None; - let mut error = Some(error); + let mut error = Some(self.0); while let Some(e) = error { let m = e.to_string(); match last { @@ -229,9 +231,16 @@ impl eyre::EyreHandler for EyreDedupHandler { 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)?; } -- 2.30.2