Skip to main content

datui_lib/widgets/
debug.rs

1use ratatui::{
2    buffer::Buffer,
3    layout::Rect,
4    widgets::{Paragraph, Widget},
5};
6
7#[derive(Default)]
8pub struct DebugState {
9    pub num_events: usize,
10    pub num_frames: usize,
11    pub num_key_events: usize,
12    pub last_key_event_name: String,
13    pub last_type_name: String,
14    /// Last action taken (e.g. "scroll_left") for debugging key handling.
15    pub last_action: String,
16    pub enabled: bool,
17    /// Snapshot of main help flag at render time (set by App when enabled). Used by --debug to verify help state.
18    pub show_help_at_render: bool,
19    /// Schema load path taken in DoLoadSchemaBlocking (one-file vs full scan); set when loading Parquet.
20    pub schema_load: Option<String>,
21}
22
23impl DebugState {
24    pub fn on_key(&mut self, event: &crossterm::event::KeyEvent) {
25        self.num_key_events += 1;
26        self.last_key_event_name = format!("{:?}", event.code);
27        self.last_type_name = format!("{:?}", event.kind);
28    }
29}
30
31impl Widget for &DebugState {
32    fn render(self, area: Rect, buf: &mut Buffer) {
33        let schema = self.schema_load.as_deref().unwrap_or("-");
34        Paragraph::new(format!(
35            "events={} keys={} last_key={} kind={} last_action={} help={} frames={} schema={}",
36            self.num_events,
37            self.num_key_events,
38            self.last_key_event_name,
39            self.last_type_name,
40            self.last_action,
41            self.show_help_at_render,
42            self.num_frames,
43            schema
44        ))
45        .render(area, buf);
46    }
47}