improve error display

This commit is contained in:
🪞👃🪞 2025-08-15 19:59:19 +03:00
parent cac3fe044e
commit ea47d605a6

View file

@ -216,16 +216,26 @@ impl App {
} }
fn render_dsl <'t, S> (state: &'t S, src: &str) -> Box<dyn Render<TuiOut>> fn render_dsl <'t, S> (state: &'t S, src: &str) -> Box<dyn Render<TuiOut>>
where S: DslSymNs<'t, Box<dyn Render<TuiOut>>> + DslExpNs<'t, Box<dyn Render<TuiOut>>> where S: DslSymNs<'t, Box<dyn Render<TuiOut>>> + DslExpNs<'t, Box<dyn Render<TuiOut>>>
{ {
if let Ok(Some(value)) = state.from_sym(src) { return value } let sym_err: Option<Box<dyn Error>> = match state.from_sym(src) {
if let Ok(Some(value)) = state.from_exp(src) { return value } Ok(Some(value)) => return value,
Box::new(Bsp::s( Ok(None) => None,
Fill::x(Align::w(Tui::bold(true, Tui::fg_bg(Color::Rgb(240,160,100), Color::Rgb(48,00,00), Err(e) => Some(e),
"Could not render:")))), };
Max::x(40, Tui::fg_bg(Color::Rgb(250,200,120), Color::Rgb(32,00,00), let exp_err = match state.from_exp(src) {
format!("{src}"))) Ok(Some(value)) => return value,
)) Ok(None) => None,
Err(e) => Some(e),
};
let (err_fg_1, err_bg_1) = (Color::Rgb(240, 160, 100), Color::Rgb(48, 0, 0));
let (err_fg_2, err_bg_2) = (Color::Rgb(250, 200, 120), Color::Rgb(32, 0, 0));
Box::new(Fill::x(col! {
Fill::x(Margin::x(1, Align::w(Tui::bold(true, Tui::fg_bg(err_fg_1, err_bg_1, "Could not render:"))))),
Fill::x(Margin::x(1, Tui::fg_bg(err_fg_2, err_bg_2, format!("{src}")))),
Fill::x(Margin::x(1, Tui::fg_bg(err_fg_2, err_bg_2, format!("{sym_err:?}")))),
Fill::x(Margin::x(1, Tui::fg_bg(err_fg_2, err_bg_2, format!("{exp_err:?}")))),
}))
} }
dsl_exp!(|app: App, tail| -> Box<dyn Render<TuiOut>> { dsl_exp!(|app: App, tail| -> Box<dyn Render<TuiOut>> {