From 2099484678f0fae88d402f865df58be93a272284 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 7 Aug 2021 16:31:26 +0100 Subject: [PATCH] eyre: wip experiment, needs some work Signed-off-by: Ian Jackson --- src/bin/client.rs | 1 + src/reporter.rs | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/bin/client.rs b/src/bin/client.rs index b3d7de3..426f974 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -336,6 +336,7 @@ async fn run_client( #[tokio::main] async fn main() -> Result<(), AE> { + dedup_eyre_setup()?; let opts = Opts::from_args(); let ics = config::read(&opts.config, LinkEnd::Client)?; diff --git a/src/reporter.rs b/src/reporter.rs index 0d199ec..dc6f432 100644 --- a/src/reporter.rs +++ b/src/reporter.rs @@ -92,13 +92,33 @@ impl<'r> Reporter<'r> { 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")?; +} -- 2.30.2