1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use serde_json::Value;
6
7use crate::{Range, Uri};
8
9#[derive(Eq, PartialEq, Clone, Copy, Deserialize, Serialize)]
10#[serde(transparent)]
11pub struct MessageType(i32);
12lsp_enum! {
13impl MessageType {
14 pub const ERROR: MessageType = MessageType(1);
16 pub const WARNING: MessageType = MessageType(2);
18 pub const INFO: MessageType = MessageType(3);
20 pub const LOG: MessageType = MessageType(4);
22 pub const DEBUG: MessageType = MessageType(5);
26}
27}
28
29#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
31#[serde(rename_all = "camelCase")]
32pub struct WindowClientCapabilities {
33 #[serde(skip_serializing_if = "Option::is_none")]
39 pub work_done_progress: Option<bool>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
45 pub show_message: Option<ShowMessageRequestClientCapabilities>,
46
47 #[serde(skip_serializing_if = "Option::is_none")]
51 pub show_document: Option<ShowDocumentClientCapabilities>,
52}
53
54#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
56#[serde(rename_all = "camelCase")]
57pub struct ShowMessageRequestClientCapabilities {
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub message_action_item: Option<MessageActionItemCapabilities>,
61}
62
63#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
64#[serde(rename_all = "camelCase")]
65pub struct MessageActionItemCapabilities {
66 #[serde(skip_serializing_if = "Option::is_none")]
70 pub additional_properties_support: Option<bool>,
71}
72
73#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
74#[serde(rename_all = "camelCase")]
75pub struct MessageActionItem {
76 pub title: String,
78
79 #[serde(flatten)]
83 pub properties: HashMap<String, MessageActionItemProperty>,
84}
85
86#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
87#[serde(untagged)]
88pub enum MessageActionItemProperty {
89 String(String),
90 Boolean(bool),
91 Integer(i32),
92 Object(Value),
93}
94
95#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
96pub struct LogMessageParams {
97 #[serde(rename = "type")]
99 pub typ: MessageType,
100
101 pub message: String,
103}
104
105#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
106pub struct ShowMessageParams {
107 #[serde(rename = "type")]
109 pub typ: MessageType,
110
111 pub message: String,
113}
114
115#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
116pub struct ShowMessageRequestParams {
117 #[serde(rename = "type")]
119 pub typ: MessageType,
120
121 pub message: String,
123
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub actions: Option<Vec<MessageActionItem>>,
127}
128
129#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
131#[serde(rename_all = "camelCase")]
132pub struct ShowDocumentClientCapabilities {
133 pub support: bool,
135}
136
137#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
141#[serde(rename_all = "camelCase")]
142pub struct ShowDocumentParams {
143 pub uri: Uri,
145
146 #[serde(skip_serializing_if = "Option::is_none")]
150 pub external: Option<bool>,
151
152 #[serde(skip_serializing_if = "Option::is_none")]
157 pub take_focus: Option<bool>,
158
159 #[serde(skip_serializing_if = "Option::is_none")]
164 pub selection: Option<Range>,
165}
166
167#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
171#[serde(rename_all = "camelCase")]
172pub struct ShowDocumentResult {
173 pub success: bool,
175}