sql_cli/ui/debug/
enhanced_debug.rs1use crate::debug::{
2 BufferDebugProvider, BufferManagerDebugProvider, DataViewDebugProvider, MemoryDebugProvider,
3};
4use crate::ui::enhanced_tui::EnhancedTuiApp;
5use std::sync::Arc;
6
7impl EnhancedTuiApp {
8 pub fn register_debug_providers(&mut self) {
10 self.debug_registry.clear();
12
13 let memory_provider = Arc::new(MemoryDebugProvider::new(self.memory_tracker.clone()));
15 self.debug_registry.register(memory_provider);
16
17 let buffers: Vec<Arc<dyn crate::buffer::BufferAPI>> = self
19 .state_container()
20 .buffers()
21 .all_buffers()
22 .iter()
23 .map(|b| Arc::new(b.clone()) as Arc<dyn crate::buffer::BufferAPI>)
24 .collect();
25
26 let buffer_manager_provider = Arc::new(BufferManagerDebugProvider::new(
27 buffers,
28 self.state_container().buffers().current_index(),
29 ));
30 self.debug_registry.register(buffer_manager_provider);
31
32 if let Some(buffer) = self.state_container().buffers().current() {
34 let buffer_provider = Arc::new(BufferDebugProvider::new(
35 Arc::new(buffer.clone()) as Arc<dyn crate::buffer::BufferAPI>
36 ));
37 self.debug_registry.register(buffer_provider);
38
39 if let Some(dataview) = buffer.dataview.as_ref() {
41 let dataview_provider =
42 Arc::new(DataViewDebugProvider::new(Arc::new(dataview.clone())));
43 self.debug_registry.register(dataview_provider);
44 }
45 }
46
47 self.memory_tracker.record_snapshot();
53 }
54
55 pub fn generate_debug_report(&self) -> String {
57 self.debug_registry.generate_debug_report()
58 }
59
60 pub fn list_debug_providers(&self) -> Vec<String> {
62 self.debug_registry.list_providers()
63 }
64}