lsp_types/
window.rs

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