blob: ac45e6083a080de9c4b55868247c274c6e84d107 [file] [log] [blame]
use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use url::Url;
use crate::Range;
#[derive(Eq, PartialEq, Clone, Copy, Deserialize, Serialize)]
#[serde(transparent)]
pub struct MessageType(i32);
lsp_enum! {
impl MessageType {
/// An error message.
pub const ERROR: MessageType = MessageType(1);
/// A warning message.
pub const WARNING: MessageType = MessageType(2);
/// An information message;
pub const INFO: MessageType = MessageType(3);
/// A log message.
pub const LOG: MessageType = MessageType(4);
}
}
/// Window specific client capabilities.
#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct WindowClientCapabilities {
/// Whether client supports handling progress notifications. If set
/// servers are allowed to report in `workDoneProgress` property in the
/// request specific server capabilities.
///
/// @since 3.15.0
#[serde(skip_serializing_if = "Option::is_none")]
pub work_done_progress: Option<bool>,
/// Capabilities specific to the showMessage request.
///
/// @since 3.16.0
#[serde(skip_serializing_if = "Option::is_none")]
pub show_message: Option<ShowMessageRequestClientCapabilities>,
/// Client capabilities for the show document request.
///
/// @since 3.16.0
#[serde(skip_serializing_if = "Option::is_none")]
pub show_document: Option<ShowDocumentClientCapabilities>,
}
/// Show message request client capabilities
#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ShowMessageRequestClientCapabilities {
/// Capabilities specific to the `MessageActionItem` type.
#[serde(skip_serializing_if = "Option::is_none")]
pub message_action_item: Option<MessageActionItemCapabilities>,
}
#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MessageActionItemCapabilities {
/// Whether the client supports additional attributes which
/// are preserved and send back to the server in the
/// request's response.
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_properties_support: Option<bool>,
}
#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MessageActionItem {
/// A short title like 'Retry', 'Open Log' etc.
pub title: String,
/// Additional attributes that the client preserves and
/// sends back to the server. This depends on the client
/// capability window.messageActionItem.additionalPropertiesSupport
#[serde(flatten)]
pub properties: HashMap<String, MessageActionItemProperty>,
}
#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
#[serde(untagged)]
pub enum MessageActionItemProperty {
String(String),
Boolean(bool),
Integer(i32),
Object(Value),
}
#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
pub struct LogMessageParams {
/// The message type. See {@link MessageType}
#[serde(rename = "type")]
pub typ: MessageType,
/// The actual message
pub message: String,
}
#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
pub struct ShowMessageParams {
/// The message type. See {@link MessageType}.
#[serde(rename = "type")]
pub typ: MessageType,
/// The actual message.
pub message: String,
}
#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
pub struct ShowMessageRequestParams {
/// The message type. See {@link MessageType}
#[serde(rename = "type")]
pub typ: MessageType,
/// The actual message
pub message: String,
/// The message action items to present.
#[serde(skip_serializing_if = "Option::is_none")]
pub actions: Option<Vec<MessageActionItem>>,
}
/// Client capabilities for the show document request.
#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ShowDocumentClientCapabilities {
/// The client has support for the show document request.
pub support: bool,
}
/// Params to show a document.
///
/// @since 3.16.0
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ShowDocumentParams {
/// The document uri to show.
pub uri: Url,
/// Indicates to show the resource in an external program.
/// To show for example `https://code.visualstudio.com/`
/// in the default WEB browser set `external` to `true`.
#[serde(skip_serializing_if = "Option::is_none")]
pub external: Option<bool>,
/// An optional property to indicate whether the editor
/// showing the document should take focus or not.
/// Clients might ignore this property if an external
/// program in started.
#[serde(skip_serializing_if = "Option::is_none")]
pub take_focus: Option<bool>,
/// An optional selection range if the document is a text
/// document. Clients might ignore the property if an
/// external program is started or the file is not a text
/// file.
#[serde(skip_serializing_if = "Option::is_none")]
pub selection: Option<Range>,
}
/// The result of an show document request.
///
/// @since 3.16.0
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ShowDocumentResult {
/// A boolean indicating if the show was successful.
pub success: bool,
}