1use dada_ir_ast::{DebugEvent, DebugEventPayload};
2use handlebars::handlebars_helper;
3use rust_embed::Embed;
4
5use crate::server::State;
6
7pub async fn try_view(event_index: usize, state: &State) -> anyhow::Result<String> {
8 let Some(event_data) = state.debug_events.lock().unwrap().get(event_index).cloned() else {
9 anyhow::bail!("Event not found");
10 };
11
12 let DebugEvent { payload, .. } = &*event_data;
13 match payload {
14 DebugEventPayload::CheckLog(log) => Ok(crate::hbs::render("log", &log)?),
15 DebugEventPayload::Diagnostic(_) => {
16 anyhow::bail!("not implemented: view diagnostics")
17 }
18 }
19}
20
21pub async fn try_view_data(event_index: usize, state: &State) -> anyhow::Result<serde_json::Value> {
22 let Some(event_data) = state.debug_events.lock().unwrap().get(event_index).cloned() else {
23 anyhow::bail!("Event not found");
24 };
25
26 let DebugEvent { payload, .. } = &*event_data;
27 match payload {
28 DebugEventPayload::CheckLog(log) => Ok(log.clone()),
29 DebugEventPayload::Diagnostic(_) => {
30 anyhow::bail!("not implemented: view diagnostics")
31 }
32 }
33}
34
35#[derive(Embed)]
36#[folder = "templates"]
37#[allow(dead_code)]
38struct Assets;
39
40handlebars_helper!(index: |events: array, i: usize| events[i].clone());