chiark / gitweb /
apitest: Explode: print the error chain too
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 19 May 2021 19:16:22 +0000 (20:16 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 19 May 2021 19:17:09 +0000 (20:17 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
apitest/apitest.rs

index b38494d1dc92b3a5488874be1884121c9a04daad..04aeaef14dda01e08ec53b9645ba540d42ba64cb 100644 (file)
@@ -92,8 +92,17 @@ impl AsRef<Opts> for Opts { fn as_ref(&self) -> &Opts { self } }
 
 #[derive(Debug)]
 pub enum Explode { }
-impl<E:Display> From<E> for Explode {
-  fn from(e: E) -> Explode { panic!("exploding on error: {}", e) }
+impl<'e, E:Into<Box<dyn Error + 'e>>> From<E> for Explode {
+  fn from(e: E) -> Explode {
+    let mut m = "exploding on error".to_string();
+    let e: Box<dyn Error> = e.into();
+    let mut e: Option<&dyn Error> = Some(&*e);
+    while let Some(te) = e {
+      m += &format!(": {}", &te);
+      e = te.source();
+    }
+    panic!("{}", m);
+  }
 }
 impl From<Explode> for anyhow::Error {
   fn from(e: Explode) -> AE { match e { } }