sql_cli/ui/debug/
enhanced_debug.rs

1use crate::debug::{
2    BufferDebugProvider, BufferManagerDebugProvider, DataViewDebugProvider, MemoryDebugProvider,
3};
4use crate::ui::enhanced_tui::EnhancedTuiApp;
5use std::sync::Arc;
6
7impl EnhancedTuiApp {
8    /// Register all available debug providers with the debug registry
9    pub fn register_debug_providers(&mut self) {
10        // Clear any existing providers first
11        self.debug_registry.clear();
12
13        // Register memory tracker
14        let memory_provider = Arc::new(MemoryDebugProvider::new(self.memory_tracker.clone()));
15        self.debug_registry.register(memory_provider);
16
17        // Register BufferManager provider
18        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        // Register current buffer provider
33        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            // Register DataView provider if available
40            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        // Note: ViewportManager cannot be registered directly as it doesn't implement Clone
48        // and we can't get ownership. This would need architectural changes to support.
49        // For now, ViewportManager debug info is gathered directly in the main debug function.
50
51        // Record a memory snapshot after registering providers
52        self.memory_tracker.record_snapshot();
53    }
54
55    /// Generate debug report using the registry
56    pub fn generate_debug_report(&self) -> String {
57        self.debug_registry.generate_debug_report()
58    }
59
60    /// Get list of registered debug providers
61    pub fn list_debug_providers(&self) -> Vec<String> {
62        self.debug_registry.list_providers()
63    }
64}