From 31fc51f5beb12a49a469f0a4aa55831ad0fa473d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 24 Jul 2020 19:42:57 +0200 Subject: Make error printing show the whole chain of errors Signed-off-by: Matthias Beyer --- src/main_view.rs | 3 ++- src/util.rs | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main_view.rs b/src/main_view.rs index 6950c9f..868efb1 100644 --- a/src/main_view.rs +++ b/src/main_view.rs @@ -119,6 +119,7 @@ impl MainView { fn add_notmuch_query_layer(siv: &mut Cursive) { use crate::util::dialog_for; + use crate::util::error_dialog_for; let edit_view = EditView::new() .on_submit(move |siv: &mut Cursive, query: &str| { @@ -146,7 +147,7 @@ impl MainView { }) .unwrap_or_else(|e: anyhow::Error| { siv.pop_layer(); - siv.add_layer(dialog_for(e)) + siv.add_layer(error_dialog_for(e)) }); }) .with_name("query"); diff --git a/src/util.rs b/src/util.rs index fcb4432..3490e30 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,5 +1,6 @@ use cursive::views::Dialog; use cursive::views::TextView; +use anyhow::Error; pub fn dialog_for(e: S) -> Dialog { Dialog::around({ @@ -9,3 +10,16 @@ pub fn dialog_for(e: S) -> Dialog { s.pop_layer(); }) } + +pub fn error_dialog_for(e: Error) -> Dialog { + let s = e.chain() + .rev() + .enumerate() + .map(|(i, e)| format!("{}: {}", i, e)) + .fold(String::new(), |acc, s| { + acc + &s + "\n" + }); + + dialog_for(s) +} + -- cgit v1.2.3