1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use serde_json::Value;
6
7use url::Url;
8
9use crate::Range;
10
11#[derive(Eq, PartialEq, Clone, Copy, Deserialize, Serialize)]
12#[serde(transparent)]
13pub struct MessageType(i32);
14lsp_enum! {
15impl MessageType {
16 pub const ERROR: MessageType = MessageType(1);
18 pub const WARNING: MessageType = MessageType(2);
20 pub const INFO: MessageType = MessageType(3);
22 pub const LOG: MessageType = MessageType(4);
24}
25}
26
27#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
29#[serde(rename_all = "camelCase")]
30pub struct WindowClientCapabilities {
31 #[serde(skip_serializing_if = "Option::is_none")]
37 pub work_done_progress: Option<bool>,
38
39 #[serde(skip_serializing_if = "Option::is_none")]
43 pub show_message: Option<ShowMessageRequestClientCapabilities>,
44
45 #[serde(skip_serializing_if = "Option::is_none")]
49 pub show_document: Option<ShowDocumentClientCapabilities>,
50}
51
52#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
54#[serde(rename_all = "camelCase")]
55pub struct ShowMessageRequestClientCapabilities {
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub message_action_item: Option<MessageActionItemCapabilities>,
59}
60
61#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
62#[serde(rename_all = "camelCase")]
63pub struct MessageActionItemCapabilities {
64 #[serde(skip_serializing_if = "Option::is_none")]
68 pub additional_properties_support: Option<bool>,
69}
70
71#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
72#[serde(rename_all = "camelCase")]
73pub struct MessageActionItem {
74 pub title: String,
76
77 #[serde(flatten)]
81 pub properties: HashMap<String, MessageActionItemProperty>,
82}
83
84#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
85#[serde(untagged)]
86pub enum MessageActionItemProperty {
87 String(String),
88 Boolean(bool),
89 Integer(i32),
90 Object(Value),
91}
92
93#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
94pub struct LogMessageParams {
95 #[serde(rename = "type")]
97 pub typ: MessageType,
98
99 pub message: String,
101}
102
103#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
104pub struct ShowMessageParams {
105 #[serde(rename = "type")]
107 pub typ: MessageType,
108
109 pub message: String,
111}
112
113#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
114pub struct ShowMessageRequestParams {
115 #[serde(rename = "type")]
117 pub typ: MessageType,
118
119 pub message: String,
121
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub actions: Option<Vec<MessageActionItem>>,
125}
126
127#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
129#[serde(rename_all = "camelCase")]
130pub struct ShowDocumentClientCapabilities {
131 pub support: bool,
133}
134
135#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
139#[serde(rename_all = "camelCase")]
140pub struct ShowDocumentParams {
141 pub uri: Url,
143
144 #[serde(skip_serializing_if = "Option::is_none")]
148 pub external: Option<bool>,
149
150 #[serde(skip_serializing_if = "Option::is_none")]
155 pub take_focus: Option<bool>,
156
157 #[serde(skip_serializing_if = "Option::is_none")]
162 pub selection: Option<Range>,
163}
164
165#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
169#[serde(rename_all = "camelCase")]
170pub struct ShowDocumentResult {
171 pub success: bool,
173}