1use crate::{
2 DynamicRegistrationClientCapabilities, Range, StaticRegistrationOptions,
3 TextDocumentIdentifier, TextDocumentRegistrationOptions, WorkDoneProgressOptions,
4 WorkDoneProgressParams,
5};
6use serde::{Deserialize, Serialize};
7
8pub type InlineValueClientCapabilities = DynamicRegistrationClientCapabilities;
9
10#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
11#[serde(untagged)]
12pub enum InlineValueServerCapabilities {
13 Options(InlineValueOptions),
14 RegistrationOptions(InlineValueRegistrationOptions),
15}
16
17#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
21pub struct InlineValueOptions {
22 #[serde(flatten)]
23 pub work_done_progress_options: WorkDoneProgressOptions,
24}
25
26#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
30pub struct InlineValueRegistrationOptions {
31 #[serde(flatten)]
32 pub inline_value_options: InlineValueOptions,
33
34 #[serde(flatten)]
35 pub text_document_registration_options: TextDocumentRegistrationOptions,
36
37 #[serde(flatten)]
38 pub static_registration_options: StaticRegistrationOptions,
39}
40
41#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
45#[serde(rename_all = "camelCase")]
46pub struct InlineValueParams {
47 #[serde(flatten)]
48 pub work_done_progress_params: WorkDoneProgressParams,
49
50 pub text_document: TextDocumentIdentifier,
52
53 pub range: Range,
55
56 pub context: InlineValueContext,
59}
60
61#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
63#[serde(rename_all = "camelCase")]
64pub struct InlineValueContext {
65 pub frame_id: i32,
67
68 pub stopped_location: Range,
72}
73
74#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
78pub struct InlineValueText {
79 pub range: Range,
81
82 pub text: String,
84}
85
86#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
95#[serde(rename_all = "camelCase")]
96pub struct InlineValueVariableLookup {
97 pub range: Range,
101
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub variable_name: Option<String>,
105
106 pub case_sensitive_lookup: bool,
108}
109
110#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
119#[serde(rename_all = "camelCase")]
120pub struct InlineValueEvaluatableExpression {
121 pub range: Range,
125
126 #[serde(skip_serializing_if = "Option::is_none")]
128 pub expression: Option<String>,
129}
130
131#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
140#[serde(untagged)]
141pub enum InlineValue {
142 Text(InlineValueText),
143 VariableLookup(InlineValueVariableLookup),
144 EvaluatableExpression(InlineValueEvaluatableExpression),
145}
146
147impl From<InlineValueText> for InlineValue {
148 #[inline]
149 fn from(from: InlineValueText) -> Self {
150 Self::Text(from)
151 }
152}
153
154impl From<InlineValueVariableLookup> for InlineValue {
155 #[inline]
156 fn from(from: InlineValueVariableLookup) -> Self {
157 Self::VariableLookup(from)
158 }
159}
160
161impl From<InlineValueEvaluatableExpression> for InlineValue {
162 #[inline]
163 fn from(from: InlineValueEvaluatableExpression) -> Self {
164 Self::EvaluatableExpression(from)
165 }
166}
167
168#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
170#[serde(rename_all = "camelCase")]
173pub struct InlineValueWorkspaceClientCapabilities {
174 #[serde(skip_serializing_if = "Option::is_none")]
182 pub refresh_support: Option<bool>,
183}
184
185#[cfg(test)]
186mod tests {
187 use super::*;
188 use crate::Position;
189 use crate::tests::test_serialization;
190
191 #[test]
192 fn inline_values() {
193 test_serialization(
194 &InlineValueText {
195 range: Range::new(Position::new(0, 0), Position::new(0, 4)),
196 text: "one".to_owned(),
197 },
198 r#"{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":4}},"text":"one"}"#,
199 );
200
201 test_serialization(
202 &InlineValue::VariableLookup(InlineValueVariableLookup {
203 range: Range::new(Position::new(1, 0), Position::new(1, 4)),
204 variable_name: None,
205 case_sensitive_lookup: false,
206 }),
207 r#"{"range":{"start":{"line":1,"character":0},"end":{"line":1,"character":4}},"caseSensitiveLookup":false}"#,
208 );
209
210 test_serialization(
211 &InlineValue::EvaluatableExpression(InlineValueEvaluatableExpression {
212 range: Range::new(Position::new(2, 0), Position::new(2, 4)),
213 expression: None,
214 }),
215 r#"{"range":{"start":{"line":2,"character":0},"end":{"line":2,"character":4}}}"#,
216 );
217 }
218}