1#![cfg_attr(not(feature = "std"), no_std)]
7
8extern crate alloc;
9
10use alloc::string::String;
11use alloc::vec::Vec;
12use serde::{Deserialize, Serialize};
13
14#[derive(Serialize, Deserialize)]
21pub enum Message {
22 Request(Request),
23 Response(Response),
24}
25
26#[derive(Serialize, Deserialize)]
28pub struct Request {
29 pub id: u32,
31 pub payload: HostRequest,
32}
33
34#[derive(Serialize, Deserialize)]
36pub struct Response {
37 pub id: u32,
39 pub result: ResponsePayload,
40}
41
42#[derive(Serialize, Deserialize)]
43pub enum ResponsePayload {
44 None,
45 String(String),
46 Error(String),
47}
48
49#[derive(Serialize, Deserialize)]
54pub enum HostRequest {
55 Operation(Operation),
56 GetConfig { key: String },
57 HasLanguage { lang: String },
58 Log { message: String },
59}
60
61#[derive(Serialize, Deserialize)]
66pub enum Operation {
67 Window(WindowOp),
68 Workspace(WorkspaceOp),
69 Terminal(TerminalOp),
70 Command(CommandOp),
71}
72
73#[derive(Serialize, Deserialize)]
74pub enum WindowOp {
75 ShowNotification {
76 message: String,
77 level: String,
78 },
79 UpdateStatusBar {
80 text: String,
81 slot: Option<String>,
82 },
83 ShowPicker {
84 title: Option<String>,
85 items: Vec<PickerItem>,
86 },
87}
88
89#[derive(Serialize, Deserialize)]
90pub enum WorkspaceOp {
91 OpenFile { path: String },
92}
93
94#[derive(Serialize, Deserialize)]
95pub enum TerminalOp {
96 Create { command: String },
97}
98
99#[derive(Serialize, Deserialize)]
100pub enum CommandOp {
101 Run { id: String },
102}
103
104#[derive(Serialize, Deserialize, Clone)]
105pub struct PickerItem {
106 pub label: String,
107 pub value: String,
108}