feat(view): better error handling
Some checks failed
/ build (push) Has been cancelled

This commit is contained in:
same mf who else 2026-02-02 04:52:04 +02:00
parent 8a5bc7b6ea
commit f3fcf663a8

View file

@ -9,12 +9,14 @@ pub trait View<O, U> {
Err(format!("View::view_word: no words defined: {word:?}").into()) Err(format!("View::view_word: no words defined: {word:?}").into())
} }
fn view <'a> (&'a self, output: &mut O, dsl: &'a impl Language) -> Usually<U> { fn view <'a> (&'a self, output: &mut O, dsl: &'a impl Language) -> Usually<U> {
if let Ok(Some(expr)) = dsl.expr() { let is_expr = dsl.expr();
self.view_expr(output, &expr) let is_word = dsl.word();
} else if let Ok(Some(word)) = dsl.word() { match (dsl.expr(), dsl.word()) {
self.view_word(output, &word) (Ok(Some(e)), _ ) => self.view_expr(output, &e),
} else { (_, Ok(Some(w))) => self.view_word(output, &w),
Err(format!("{dsl:?}: invalid").into()) (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()),
} }
} }
} }