1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::filesystems::{DirItemInfo, FileInfo};
6use crate::state::StateData;
7use crate::{Errors, LanguageServer};
8
9#[derive(Serialize, Deserialize, Debug, Clone)]
11#[serde(tag = "msg_type")]
12pub enum Messages {
13 ListenToState {
17 trigger: String,
19 state_id: u8,
21 },
22 StateUpdated {
23 state_data: StateData,
24 },
25 ShowPopup {
26 state_id: u8,
27 popup_id: String,
28 content: String,
29 title: String,
30 },
31 ShowStatusBarItem {
32 state_id: u8,
33 statusbar_item_id: String,
34 label: String,
35 },
36 HideStatusBarItem {
37 state_id: u8,
38 statusbar_item_id: String,
39 },
40 RegisterLanguageServers {
41 state_id: u8,
42 languages: HashMap<String, LanguageServer>,
43 extension_id: String,
44 },
45 NotifyLanguageServersClient {
46 state_id: u8,
47 content: String,
48 },
49 NotifyLanguageServers {
50 state_id: u8,
51 message: LanguageServerMessage,
52 },
53}
54
55impl Messages {
56 pub fn get_state_id(&self) -> u8 {
57 match self {
58 Self::ListenToState { state_id, .. } => *state_id,
59 Self::StateUpdated { state_data } => state_data.id,
60 Self::ShowPopup { state_id, .. } => *state_id,
61 Self::ShowStatusBarItem { state_id, .. } => *state_id,
62 Self::HideStatusBarItem { state_id, .. } => *state_id,
63 Self::RegisterLanguageServers { state_id, .. } => *state_id,
64 Self::NotifyLanguageServersClient { state_id, .. } => *state_id,
65 Self::NotifyLanguageServers { state_id, .. } => *state_id,
66 }
67 }
68}
69
70#[derive(Serialize, Deserialize, Debug, Clone)]
72#[serde(tag = "msg_type")]
73pub enum LanguageServerMessage {
74 Initialization { id: String },
75 Notification { id: String, content: String },
76}
77
78#[derive(Serialize, Deserialize, Debug, Clone)]
80pub enum ExtensionMessages {
81 CoreMessage(Messages),
83 ReadFile(u8, String, Result<FileInfo, Errors>),
84 WriteFile(u8, String, String, Result<(), Errors>),
85 ListDir(u8, String, String, Result<Vec<DirItemInfo>, Errors>),
86 Unload(u8),
87}
88
89impl ExtensionMessages {
90 pub fn get_state_id(&self) -> u8 {
91 match self {
92 Self::CoreMessage(msg) => msg.get_state_id(),
93 Self::ReadFile(state_id, ..) => *state_id,
94 Self::WriteFile(state_id, ..) => *state_id,
95 Self::ListDir(state_id, ..) => *state_id,
96 Self::Unload(state_id, ..) => *state_id,
97 }
98 }
99
100 pub fn get_name(&self) -> &str {
101 match self {
102 Self::CoreMessage(..) => "core",
103 Self::ReadFile(..) => "readFile",
104 Self::WriteFile(..) => "writeFile",
105 Self::ListDir(..) => "listDir",
106 Self::Unload(..) => "unload",
107 }
108 }
109}