lingxia_platform/traits/
keyboard.rs1use crate::error::PlatformError;
2use async_trait::async_trait;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7#[serde(rename_all = "snake_case")]
8pub enum AppKeyboardModifier {
9 Command,
10 Shift,
11 Option,
12 Control,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
21#[serde(tag = "kind", rename_all = "snake_case")]
22pub enum AppKeyboardAction {
23 Type { text: String },
25 Press {
27 key: String,
28 #[serde(default)]
29 modifiers: Vec<AppKeyboardModifier>,
30 },
31}
32
33impl AppKeyboardAction {
34 pub fn kind(&self) -> &'static str {
35 match self {
36 Self::Type { .. } => "type",
37 Self::Press { .. } => "press",
38 }
39 }
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct AppKeyboardRequest {
44 #[serde(default, skip_serializing_if = "Option::is_none")]
45 pub window_id: Option<String>,
46 pub action: AppKeyboardAction,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct AppKeyboardResult {
51 pub window_id: String,
52 pub action: String,
53 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub modifier_reliability: Option<String>,
56}
57
58#[async_trait]
63pub trait AppKeyboard: Send + Sync {
64 async fn perform_app_keyboard(
65 &self,
66 request: AppKeyboardRequest,
67 ) -> Result<AppKeyboardResult, PlatformError> {
68 let _ = request;
69 Err(PlatformError::NotSupported(
70 "app keyboard input is not implemented for this platform".to_string(),
71 ))
72 }
73}