1mod action;
2mod app;
3mod duration;
4mod pages;
5mod panes;
6mod state;
7mod syntax_highlighting;
8mod tui;
9
10use miden_assembly_syntax::diagnostics::{IntoDiagnostic, Report};
11
12pub use self::state::{DebugMode, State};
13use self::{action::Action, app::App};
14use crate::config::DebuggerConfig;
15
16#[allow(dead_code)]
17pub fn run(config: Box<DebuggerConfig>, logger: Box<dyn log::Log>) -> Result<(), Report> {
18 let mut builder = tokio::runtime::Builder::new_current_thread();
19 let rt = builder.enable_all().build().into_diagnostic()?;
20 rt.block_on(async move { start_ui(config, logger).await })
21}
22
23pub fn run_with_state(state: State, logger: Box<dyn log::Log>) -> Result<(), Report> {
28 let mut builder = tokio::runtime::Builder::new_current_thread();
29 let rt = builder.enable_all().build().into_diagnostic()?;
30 rt.block_on(async move { start_ui_with_state(state, logger).await })
31}
32
33#[allow(dead_code)]
34pub async fn start_ui(
35 config: Box<DebuggerConfig>,
36 logger: Box<dyn log::Log>,
37) -> Result<(), Report> {
38 use ratatui::crossterm as term;
39
40 crate::logger::DebugLogger::install(logger);
41
42 let original_hook = std::panic::take_hook();
43 std::panic::set_hook(Box::new(move |panic_info| {
44 let _ = term::terminal::disable_raw_mode();
45 let _ = term::execute!(std::io::stdout(), term::terminal::LeaveAlternateScreen);
46 original_hook(panic_info);
47 }));
48
49 let mut app = App::new(config).await?;
50 app.run().await?;
51
52 Ok(())
53}
54
55async fn start_ui_with_state(state: State, logger: Box<dyn log::Log>) -> Result<(), Report> {
56 use ratatui::crossterm as term;
57
58 crate::logger::DebugLogger::install(logger);
59
60 let original_hook = std::panic::take_hook();
61 std::panic::set_hook(Box::new(move |panic_info| {
62 let _ = term::terminal::disable_raw_mode();
63 let _ = term::execute!(std::io::stdout(), term::terminal::LeaveAlternateScreen);
64 original_hook(panic_info);
65 }));
66
67 let mut app = App::from_state(state).await?;
68 app.run().await?;
69
70 Ok(())
71}