#![cfg_attr(not(feature = "std"), no_std)]
extern crate alloc;
use alloc::string::String;
use alloc::vec::Vec;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub enum Message {
Request(Request),
Response(Response),
}
#[derive(Serialize, Deserialize)]
pub struct Request {
pub id: u32,
pub payload: HostRequest,
}
#[derive(Serialize, Deserialize)]
pub struct Response {
pub id: u32,
pub result: ResponsePayload,
}
#[derive(Serialize, Deserialize)]
pub enum ResponsePayload {
None,
String(String),
Error(String),
}
#[derive(Serialize, Deserialize)]
pub enum HostRequest {
Operation(Operation),
GetConfig { key: String },
HasLanguage { lang: String },
Log { message: String },
}
#[derive(Serialize, Deserialize)]
pub enum Operation {
Window(WindowOp),
Workspace(WorkspaceOp),
Terminal(TerminalOp),
Command(CommandOp),
}
#[derive(Serialize, Deserialize)]
pub enum WindowOp {
ShowNotification {
message: String,
level: String,
},
UpdateStatusBar {
text: String,
slot: Option<String>,
},
ShowPicker {
title: Option<String>,
items: Vec<PickerItem>,
},
}
#[derive(Serialize, Deserialize)]
pub enum WorkspaceOp {
OpenFile { path: String },
}
#[derive(Serialize, Deserialize)]
pub enum TerminalOp {
Create { command: String },
}
#[derive(Serialize, Deserialize)]
pub enum CommandOp {
Run { id: String },
}
#[derive(Serialize, Deserialize, Clone)]
pub struct PickerItem {
pub label: String,
pub value: String,
}