1 use serde::{Deserialize, Serialize};
2 
3 use crate::{
4     PartialResultParams, Position, Range, StaticTextDocumentRegistrationOptions,
5     TextDocumentIdentifier, WorkDoneProgressOptions, WorkDoneProgressParams,
6 };
7 #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
8 #[serde(rename_all = "camelCase")]
9 pub struct SelectionRangeClientCapabilities {
10     /// Whether implementation supports dynamic registration for selection range
11     /// providers. If this is set to `true` the client supports the new
12     /// `SelectionRangeRegistrationOptions` return value for the corresponding
13     /// server capability as well.
14     #[serde(skip_serializing_if = "Option::is_none")]
15     pub dynamic_registration: Option<bool>,
16 }
17 
18 #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
19 pub struct SelectionRangeOptions {
20     #[serde(flatten)]
21     pub work_done_progress_options: WorkDoneProgressOptions,
22 }
23 
24 #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
25 pub struct SelectionRangeRegistrationOptions {
26     #[serde(flatten)]
27     pub selection_range_options: SelectionRangeOptions,
28 
29     #[serde(flatten)]
30     pub registration_options: StaticTextDocumentRegistrationOptions,
31 }
32 
33 #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
34 #[serde(untagged)]
35 pub enum SelectionRangeProviderCapability {
36     Simple(bool),
37     Options(SelectionRangeOptions),
38     RegistrationOptions(SelectionRangeRegistrationOptions),
39 }
40 
41 impl From<SelectionRangeRegistrationOptions> for SelectionRangeProviderCapability {
from(from: SelectionRangeRegistrationOptions) -> Self42     fn from(from: SelectionRangeRegistrationOptions) -> Self {
43         Self::RegistrationOptions(from)
44     }
45 }
46 
47 impl From<SelectionRangeOptions> for SelectionRangeProviderCapability {
from(from: SelectionRangeOptions) -> Self48     fn from(from: SelectionRangeOptions) -> Self {
49         Self::Options(from)
50     }
51 }
52 
53 impl From<bool> for SelectionRangeProviderCapability {
from(from: bool) -> Self54     fn from(from: bool) -> Self {
55         Self::Simple(from)
56     }
57 }
58 
59 /// A parameter literal used in selection range requests.
60 #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
61 #[serde(rename_all = "camelCase")]
62 pub struct SelectionRangeParams {
63     /// The text document.
64     pub text_document: TextDocumentIdentifier,
65 
66     /// The positions inside the text document.
67     pub positions: Vec<Position>,
68 
69     #[serde(flatten)]
70     pub work_done_progress_params: WorkDoneProgressParams,
71 
72     #[serde(flatten)]
73     pub partial_result_params: PartialResultParams,
74 }
75 
76 /// Represents a selection range.
77 #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
78 #[serde(rename_all = "camelCase")]
79 pub struct SelectionRange {
80     /// Range of the selection.
81     pub range: Range,
82 
83     /// The parent selection range containing this range.
84     #[serde(skip_serializing_if = "Option::is_none")]
85     pub parent: Option<Box<SelectionRange>>,
86 }
87