#[tokio::main]
async fn main() -> Result<(), AE> {
+ dedup_eyre_setup()?;
let opts = Opts::from_args();
let ics = config::read(&opts.config, LinkEnd::Client)?;
write!(m, " ({}ok)", self.successes)?;
self.successes = 0;
}
- write!(m, ": {:?}", e)?;
+ write!(m, ": {}", e)?;
Ok::<_,fmt::Error>(m)
})().unwrap();
- warn!(target:"hippotat", "{}", m);
+ warn!(target:"hippotat", "{:?}", m);
self.last_report = Some(Report { when: now, ok: Err(()) });
None
},
}
}
}
+
+struct EyreDedupHandler;
+type EyreDynError<'r> = &'r (dyn std::error::Error + 'static);
+
+impl eyre::EyreHandler for EyreDedupHandler {
+ #[throws(fmt::Error)]
+ fn debug(&self, error: EyreDynError, f: &mut fmt::Formatter) {
+ Debug::fmt(error, f)?;
+ }
+ #[throws(fmt::Error)]
+ fn display(&self, error: EyreDynError, f: &mut fmt::Formatter) {
+ Display::fmt(error, f)?;
+ }
+}
+
+#[throws(AE)]
+pub fn dedup_eyre_setup() {
+ eyre::set_hook(Box::new(|_error| Box::new(EyreDedupHandler)))
+ .context("set error handler")?;
+}