Skip to main content

tauri_plugin_debug_tools/
config.rs

1use std::path::PathBuf;
2use tauri::{AppHandle, Manager, Runtime};
3use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum ConfigError {
7    #[error("Failed to get log directory: {0}")]
8    LogDirectory(String),
9    #[error("Failed to create directory: {0}")]
10    CreateDirectory(#[from] std::io::Error),
11}
12
13#[derive(Debug, Clone)]
14pub enum LogFormat {
15    Json,
16    Text,
17}
18
19#[derive(Debug, Clone)]
20pub struct DebugToolsConfig {
21    pub log_dir: PathBuf,
22    pub max_log_size_bytes: u64,
23    pub log_format: LogFormat,
24    pub enable_dom_capture: bool,
25    pub enable_rust_logging: bool,
26}
27
28impl Default for DebugToolsConfig {
29    fn default() -> Self {
30        Self {
31            log_dir: PathBuf::from("/tmp/tauri-debug-tools"),
32            max_log_size_bytes: 50_000,
33            log_format: LogFormat::Json,
34            enable_dom_capture: true,
35            enable_rust_logging: true,
36        }
37    }
38}
39
40impl DebugToolsConfig {
41    pub fn from_app_handle<R: Runtime>(app: &AppHandle<R>) -> Result<Self, ConfigError> {
42        let log_dir = app
43            .path()
44            .app_log_dir()
45            .map_err(|e| ConfigError::LogDirectory(e.to_string()))?
46            .join("debug-tools");
47
48        std::fs::create_dir_all(&log_dir)?;
49
50        Ok(Self {
51            log_dir,
52            max_log_size_bytes: 50_000,
53            log_format: LogFormat::Json,
54            enable_dom_capture: true,
55            enable_rust_logging: true,
56        })
57    }
58
59    pub fn frontend_log_path(&self, app_name: &str, pid: u32) -> PathBuf {
60        let sanitized_name = app_name.replace(' ', "_");
61        self.log_dir
62            .join(format!("frontend_console_{}_{}.jsonl", sanitized_name, pid))
63    }
64
65    pub fn backend_log_path(&self) -> PathBuf {
66        self.log_dir.join("rust_debug.log")
67    }
68
69    pub fn screenshot_dir(&self) -> PathBuf {
70        self.log_dir.join("screenshots")
71    }
72
73    pub fn dom_snapshot_dir(&self) -> PathBuf {
74        self.log_dir.join("dom_snapshots")
75    }
76
77    pub fn ensure_subdirectories(&self) -> Result<(), ConfigError> {
78        std::fs::create_dir_all(self.screenshot_dir())?;
79        std::fs::create_dir_all(self.dom_snapshot_dir())?;
80        Ok(())
81    }
82}