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}