mirror of https://github.com/helix-editor/helix
172 lines
5.4 KiB
Rust
172 lines
5.4 KiB
Rust
use std::collections::HashMap;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use serde_json::Value;
|
|
|
|
use crate::{Range, Url};
|
|
|
|
#[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,
|
|
}
|