Skip to main content

dscode_terminal/
tauri_sender.rs

1use crate::TerminalEventSender;
2use tauri::{AppHandle, Emitter};
3
4/// [`TerminalEventSender`] implementation that forwards events through the
5/// Tauri event system.
6///
7/// Requires the `tauri` feature flag.
8///
9/// # Events emitted
10///
11/// | Event name                    | Payload          |
12/// |-------------------------------|------------------|
13/// | `terminal-data:{terminal_id}` | `{ "data": … }` |
14/// | `terminal-closed`             | `{terminal_id}`  |
15pub struct TauriEventSender {
16    app_handle: AppHandle,
17}
18
19impl TauriEventSender {
20    pub fn new(app_handle: AppHandle) -> Self {
21        Self { app_handle }
22    }
23}
24
25impl TerminalEventSender for TauriEventSender {
26    fn send_output(&self, terminal_id: &str, data: &str) {
27        let event_name = format!("terminal-data:{}", terminal_id);
28        self.app_handle
29            .emit(&event_name, serde_json::json!({ "data": data }))
30            .ok();
31    }
32
33    fn send_close(&self, terminal_id: &str) {
34        self.app_handle.emit("terminal-closed", terminal_id).ok();
35    }
36}