tauri_plugin_debug_tools/
config.rs1use 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}