Skip to main content

tauri_plugin_automation_server/
lib.rs

1//! Tauri Automation Plugin
2//!
3//! Provides HTTP API for external automation of Tauri v2 applications.
4//! Enables Claude Code and other tools to control Tauri apps for testing.
5//!
6//! **Note:** Rust crate supports Tauri v2 only. The JavaScript API supports both v1 and v2.
7//!
8//! ## Usage
9//!
10//! ```toml
11//! tauri-plugin-automation-server = { git = "https://github.com/dcherrera/tauri-plugin-automation" }
12//! ```
13//!
14//! ```rust,ignore
15//! tauri::Builder::default()
16//!     .setup(|app| {
17//!         tauri_plugin_automation_server::start_server(app.handle().clone());
18//!         Ok(())
19//!     })
20//! ```
21
22pub mod server;
23
24use std::sync::Mutex;
25use tauri::AppHandle;
26
27/// Global screenshot data buffer
28static SCREENSHOT_DATA: Mutex<Option<String>> = Mutex::new(None);
29
30/// Store screenshot data from JavaScript
31pub fn set_screenshot_data(data: String) {
32    if let Ok(mut guard) = SCREENSHOT_DATA.lock() {
33        *guard = Some(data);
34    }
35}
36
37/// Take screenshot data (clears buffer)
38pub fn take_screenshot_data() -> Option<String> {
39    if let Ok(mut guard) = SCREENSHOT_DATA.lock() {
40        guard.take()
41    } else {
42        None
43    }
44}
45
46/// Start the automation HTTP server
47///
48/// Call this in your Tauri setup to enable external automation.
49///
50/// # Example
51/// ```rust,ignore
52/// tauri::Builder::default()
53///     .setup(|app| {
54///         tauri_plugin_automation_server::start_server(app.handle().clone());
55///         Ok(())
56///     })
57/// ```
58pub fn start_server(app_handle: AppHandle) {
59    std::thread::spawn(move || {
60        server::run_server(app_handle);
61    });
62    println!("[Automation] Plugin initialized - HTTP server starting on port 9876");
63}
64
65/// Receive screenshot data from JavaScript
66///
67/// Users should create their own command wrapper:
68/// ```rust,ignore
69/// #[tauri::command]
70/// fn automation_screenshot_data(data: String) {
71///     tauri_plugin_automation_server::set_screenshot_data(data);
72/// }
73/// ```
74pub fn receive_screenshot(data: String) {
75    set_screenshot_data(data);
76}