use serde::{Deserialize, Serialize}; use crate::{ MarkedString, MarkupContent, MarkupKind, Range, TextDocumentPositionParams, TextDocumentRegistrationOptions, WorkDoneProgressOptions, WorkDoneProgressParams, }; #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct HoverClientCapabilities { /// Whether completion supports dynamic registration. #[serde(skip_serializing_if = "Option::is_none")] pub dynamic_registration: Option, /// Client supports the follow content formats for the content /// property. The order describes the preferred format of the client. #[serde(skip_serializing_if = "Option::is_none")] pub content_format: Option>, } /// Hover options. #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct HoverOptions { #[serde(flatten)] pub work_done_progress_options: WorkDoneProgressOptions, } #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct HoverRegistrationOptions { #[serde(flatten)] pub text_document_registration_options: TextDocumentRegistrationOptions, #[serde(flatten)] pub hover_options: HoverOptions, } #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] #[serde(untagged)] pub enum HoverProviderCapability { Simple(bool), Options(HoverOptions), } impl From for HoverProviderCapability { fn from(from: HoverOptions) -> Self { Self::Options(from) } } impl From for HoverProviderCapability { fn from(from: bool) -> Self { Self::Simple(from) } } #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct HoverParams { #[serde(flatten)] pub text_document_position_params: TextDocumentPositionParams, #[serde(flatten)] pub work_done_progress_params: WorkDoneProgressParams, } /// The result of a hover request. #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] pub struct Hover { /// The hover's content pub contents: HoverContents, /// An optional range is a range inside a text document /// that is used to visualize a hover, e.g. by changing the background color. #[serde(skip_serializing_if = "Option::is_none")] pub range: Option, } /// Hover contents could be single entry or multiple entries. #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)] #[serde(untagged)] pub enum HoverContents { Scalar(MarkedString), Array(Vec), Markup(MarkupContent), }