Skip to main content

lsp_types_max/
window.rs

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    /// An error message.
15    pub const ERROR: MessageType = MessageType(1);
16    /// A warning message.
17    pub const WARNING: MessageType = MessageType(2);
18    /// An information message;
19    pub const INFO: MessageType = MessageType(3);
20    /// A log message.
21    pub const LOG: MessageType = MessageType(4);
22    /// A debug message.
23    ///
24    /// @since 3.18.0
25    pub const DEBUG: MessageType = MessageType(5);
26}
27}
28
29/// Window specific client capabilities.
30#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
31#[serde(rename_all = "camelCase")]
32pub struct WindowClientCapabilities {
33    /// Whether client supports handling progress notifications. If set
34    /// servers are allowed to report in `workDoneProgress` property in the
35    /// request specific server capabilities.
36    ///
37    /// @since 3.15.0
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub work_done_progress: Option<bool>,
40
41    /// Capabilities specific to the showMessage request.
42    ///
43    /// @since 3.16.0
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub show_message: Option<ShowMessageRequestClientCapabilities>,
46
47    /// Client capabilities for the show document request.
48    ///
49    /// @since 3.16.0
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub show_document: Option<ShowDocumentClientCapabilities>,
52}
53
54/// Show message request client capabilities
55#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
56#[serde(rename_all = "camelCase")]
57pub struct ShowMessageRequestClientCapabilities {
58    /// Capabilities specific to the `MessageActionItem` type.
59    #[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    /// Whether the client supports additional attributes which
67    /// are preserved and send back to the server in the
68    /// request's response.
69    #[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    /// A short title like 'Retry', 'Open Log' etc.
77    pub title: String,
78
79    /// Additional attributes that the client preserves and
80    /// sends back to the server. This depends on the client
81    /// capability window.messageActionItem.additionalPropertiesSupport
82    #[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    /// The message type. See {@link MessageType}
98    #[serde(rename = "type")]
99    pub typ: MessageType,
100
101    /// The actual message
102    pub message: String,
103}
104
105#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
106pub struct ShowMessageParams {
107    /// The message type. See {@link MessageType}.
108    #[serde(rename = "type")]
109    pub typ: MessageType,
110
111    /// The actual message.
112    pub message: String,
113}
114
115#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
116pub struct ShowMessageRequestParams {
117    /// The message type. See {@link MessageType}
118    #[serde(rename = "type")]
119    pub typ: MessageType,
120
121    /// The actual message
122    pub message: String,
123
124    /// The message action items to present.
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub actions: Option<Vec<MessageActionItem>>,
127}
128
129/// Client capabilities for the show document request.
130#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
131#[serde(rename_all = "camelCase")]
132pub struct ShowDocumentClientCapabilities {
133    /// The client has support for the show document request.
134    pub support: bool,
135}
136
137/// Params to show a document.
138///
139/// @since 3.16.0
140#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
141#[serde(rename_all = "camelCase")]
142pub struct ShowDocumentParams {
143    /// The document uri to show.
144    pub uri: Uri,
145
146    /// Indicates to show the resource in an external program.
147    /// To show for example `https://code.visualstudio.com/`
148    /// in the default WEB browser set `external` to `true`.
149    #[serde(skip_serializing_if = "Option::is_none")]
150    pub external: Option<bool>,
151
152    /// An optional property to indicate whether the editor
153    /// showing the document should take focus or not.
154    /// Clients might ignore this property if an external
155    /// program in started.
156    #[serde(skip_serializing_if = "Option::is_none")]
157    pub take_focus: Option<bool>,
158
159    /// An optional selection range if the document is a text
160    /// document. Clients might ignore the property if an
161    /// external program is started or the file is not a text
162    /// file.
163    #[serde(skip_serializing_if = "Option::is_none")]
164    pub selection: Option<Range>,
165}
166
167/// The result of an show document request.
168///
169/// @since 3.16.0
170#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
171#[serde(rename_all = "camelCase")]
172pub struct ShowDocumentResult {
173    /// A boolean indicating if the show was successful.
174    pub success: bool,
175}