chiark / gitweb /
Introduce DisplayError
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Jan 2023 12:20:31 +0000 (12:20 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Jan 2023 17:02:08 +0000 (17:02 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/reporter.rs

index dc8a575dd25ebb6916f75b9bbb410630c87379c8..17441d87193c76ae7dd2cf9e8e100e0d012ffc29 100644 (file)
@@ -211,13 +211,15 @@ struct EyreDedupHandler {
   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 {
@@ -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)?;
     }