use serde::{Deserialize, Serialize}; use ts_rs::TS; #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "snake_case")] #[ts(export, export_to = "gen_rpc.ts")] pub enum GlobalAction { ProxyStart, ProxyStop, } #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(tag = "scope", rename_all = "snake_case")] #[ts(export, export_to = "gen_rpc.ts")] pub enum ActionInvocation { Global { action: GlobalAction }, } #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "camelCase")] #[ts(export, export_to = "gen_rpc.ts")] pub struct ActionMetadata { pub label: String, pub default_hotkey: Option, } fn default_hotkey(mac: &str, other: &str) -> Option { if cfg!(target_os = "macos") { Some(mac.into()) } else { Some(other.into()) } } /// All global actions with their metadata, used by `list_actions` RPC. pub fn all_global_actions() -> Vec<(ActionInvocation, ActionMetadata)> { vec![ ( ActionInvocation::Global { action: GlobalAction::ProxyStart }, ActionMetadata { label: "Start Proxy".into(), default_hotkey: default_hotkey("Meta+Shift+P", "Ctrl+Shift+P"), }, ), ( ActionInvocation::Global { action: GlobalAction::ProxyStop }, ActionMetadata { label: "Stop Proxy".into(), default_hotkey: default_hotkey("Meta+Shift+S", "Ctrl+Shift+S"), }, ), ] }