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}
23}
24
25#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
27#[serde(rename_all = "camelCase")]
28pub struct WindowClientCapabilities {
29 #[serde(skip_serializing_if = "Option::is_none")]
35 pub work_done_progress: Option<bool>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
41 pub show_message: Option<ShowMessageRequestClientCapabilities>,
42
43 #[serde(skip_serializing_if = "Option::is_none")]
47 pub show_document: Option<ShowDocumentClientCapabilities>,
48}
49
50#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
52#[serde(rename_all = "camelCase")]
53pub struct ShowMessageRequestClientCapabilities {
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub message_action_item: Option<MessageActionItemCapabilities>,
57}
58
59#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
60#[serde(rename_all = "camelCase")]
61pub struct MessageActionItemCapabilities {
62 #[serde(skip_serializing_if = "Option::is_none")]
66 pub additional_properties_support: Option<bool>,
67}
68
69#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
70#[serde(rename_all = "camelCase")]
71pub struct MessageActionItem {
72 pub title: String,
74
75 #[serde(flatten)]
79 pub properties: HashMap<String, MessageActionItemProperty>,
80}
81
82#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
83#[serde(untagged)]
84pub enum MessageActionItemProperty {
85 String(String),
86 Boolean(bool),
87 Integer(i32),
88 Object(Value),
89}
90
91#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
92pub struct LogMessageParams {
93 #[serde(rename = "type")]
95 pub typ: MessageType,
96
97 pub message: String,
99}
100
101#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
102pub struct ShowMessageParams {
103 #[serde(rename = "type")]
105 pub typ: MessageType,
106
107 pub message: String,
109}
110
111#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
112pub struct ShowMessageRequestParams {
113 #[serde(rename = "type")]
115 pub typ: MessageType,
116
117 pub message: String,
119
120 #[serde(skip_serializing_if = "Option::is_none")]
122 pub actions: Option<Vec<MessageActionItem>>,
123}
124
125#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
127#[serde(rename_all = "camelCase")]
128pub struct ShowDocumentClientCapabilities {
129 pub support: bool,
131}
132
133#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
137#[serde(rename_all = "camelCase")]
138pub struct ShowDocumentParams {
139 pub uri: Uri,
141
142 #[serde(skip_serializing_if = "Option::is_none")]
146 pub external: Option<bool>,
147
148 #[serde(skip_serializing_if = "Option::is_none")]
153 pub take_focus: Option<bool>,
154
155 #[serde(skip_serializing_if = "Option::is_none")]
160 pub selection: Option<Range>,
161}
162
163#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
167#[serde(rename_all = "camelCase")]
168pub struct ShowDocumentResult {
169 pub success: bool,
171}