From f3fcf663a8fed20a59503d94061ad8b7f8c38486 Mon Sep 17 00:00:00 2001 From: same mf who else Date: Mon, 2 Feb 2026 04:52:04 +0200 Subject: [PATCH] feat(view): better error handling --- output/src/view.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/output/src/view.rs b/output/src/view.rs index fc6411a..1857ce2 100644 --- a/output/src/view.rs +++ b/output/src/view.rs @@ -9,12 +9,14 @@ pub trait View { Err(format!("View::view_word: no words defined: {word:?}").into()) } fn view <'a> (&'a self, output: &mut O, dsl: &'a impl Language) -> Usually { - if let Ok(Some(expr)) = dsl.expr() { - self.view_expr(output, &expr) - } else if let Ok(Some(word)) = dsl.word() { - self.view_word(output, &word) - } else { - Err(format!("{dsl:?}: invalid").into()) + let is_expr = dsl.expr(); + let is_word = dsl.word(); + match (dsl.expr(), dsl.word()) { + (Ok(Some(e)), _ ) => self.view_expr(output, &e), + (_, Ok(Some(w))) => self.view_word(output, &w), + (Err(e), _ ) => Err(format!("invalid view expr:\n{dsl:?}\n{e}").into()), + (_, Err(w) ) => Err(format!("invalid view word:\n{dsl:?}\n{w}").into()), + (Ok(None), Ok(None) ) => Err(format!("empty view:\n{dsl:?}").into()), } } }