use serde::{Deserialize, Serialize}; use std::sync::Arc; use tokio::sync::Mutex; use crate::profiler_ws::ProfilerServer; #[derive(Debug, Serialize, Deserialize)] pub struct ProjectInfo { pub name: String, pub path: String, pub version: String, } #[derive(Debug, Serialize, Deserialize)] pub struct EditorConfig { pub theme: String, pub auto_save: bool, pub recent_projects: Vec, } impl Default for EditorConfig { fn default() -> Self { Self { theme: "dark".to_string(), auto_save: true, recent_projects: Vec::new(), } } } pub struct ProfilerState { pub server: Arc>>>, } #[tauri::command] pub async fn start_profiler_server( port: u16, state: tauri::State<'_, ProfilerState>, ) -> Result { let mut server_lock = state.server.lock().await; if server_lock.is_some() { return Err("Profiler server is already running".to_string()); } let server = Arc::new(ProfilerServer::new(port)); match server.start().await { Ok(_) => { *server_lock = Some(server); Ok(format!("Profiler server started on port {}", port)) } Err(e) => Err(format!("Failed to start profiler server: {}", e)), } } #[tauri::command] pub async fn stop_profiler_server( state: tauri::State<'_, ProfilerState>, ) -> Result { let mut server_lock = state.server.lock().await; if server_lock.is_none() { return Err("Profiler server is not running".to_string()); } *server_lock = None; Ok("Profiler server stopped".to_string()) } #[tauri::command] pub async fn get_profiler_status( state: tauri::State<'_, ProfilerState>, ) -> Result { let server_lock = state.server.lock().await; Ok(server_lock.is_some()) }