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