1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use serde_json::Value;
6
7use crate::{Range, Uri, macros::lsp_enum};
8
9#[derive(Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
10#[serde(transparent)]
11pub struct MessageType(i32);
12
13lsp_enum! {
14 impl MessageType {
15 const ERROR = 1;
17 const WARNING = 2;
19 const INFO = 3;
21 const LOG = 4;
23 }
24}
25
26#[derive(Debug, PartialEq, Eq, Clone, Default, Deserialize, Serialize)]
28#[serde(rename_all = "camelCase")]
29pub struct WindowClientCapabilities {
30 #[serde(skip_serializing_if = "Option::is_none")]
36 pub work_done_progress: Option<bool>,
37
38 #[serde(skip_serializing_if = "Option::is_none")]
42 pub show_message: Option<ShowMessageRequestClientCapabilities>,
43
44 #[serde(skip_serializing_if = "Option::is_none")]
48 pub show_document: Option<ShowDocumentClientCapabilities>,
49}
50
51#[derive(Debug, PartialEq, Eq, Clone, Default, Deserialize, Serialize)]
53#[serde(rename_all = "camelCase")]
54pub struct ShowMessageRequestClientCapabilities {
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub message_action_item: Option<MessageActionItemCapabilities>,
58}
59
60#[derive(Debug, PartialEq, Eq, Clone, Default, Deserialize, Serialize)]
61#[serde(rename_all = "camelCase")]
62pub struct MessageActionItemCapabilities {
63 #[serde(skip_serializing_if = "Option::is_none")]
67 pub additional_properties_support: Option<bool>,
68}
69
70#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
71#[serde(rename_all = "camelCase")]
72pub struct MessageActionItem {
73 pub title: String,
75
76 #[serde(flatten)]
80 pub properties: HashMap<String, MessageActionItemProperty>,
81}
82
83#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
84#[serde(untagged)]
85pub enum MessageActionItemProperty {
86 String(String),
87 Boolean(bool),
88 Integer(i32),
89 Object(Value),
90}
91
92#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
93pub struct LogMessageParams {
94 #[serde(rename = "type")]
96 pub typ: MessageType,
97
98 pub message: String,
100}
101
102#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
103pub struct ShowMessageParams {
104 #[serde(rename = "type")]
106 pub typ: MessageType,
107
108 pub message: String,
110}
111
112#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
113pub struct ShowMessageRequestParams {
114 #[serde(rename = "type")]
116 pub typ: MessageType,
117
118 pub message: String,
120
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub actions: Option<Vec<MessageActionItem>>,
124}
125
126#[derive(Debug, PartialEq, Eq, Clone, Default, Deserialize, Serialize)]
128#[serde(rename_all = "camelCase")]
129pub struct ShowDocumentClientCapabilities {
130 pub support: bool,
132}
133
134#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)]
138#[serde(rename_all = "camelCase")]
139pub struct ShowDocumentParams {
140 pub uri: Uri,
142
143 #[serde(skip_serializing_if = "Option::is_none")]
147 pub external: Option<bool>,
148
149 #[serde(skip_serializing_if = "Option::is_none")]
154 pub take_focus: Option<bool>,
155
156 #[serde(skip_serializing_if = "Option::is_none")]
161 pub selection: Option<Range>,
162}
163
164#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)]
168#[serde(rename_all = "camelCase")]
169pub struct ShowDocumentResult {
170 pub success: bool,
172}