ls_types/
window.rs

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