1use crate::{Range, Uri};
8use serde::{Deserialize, Serialize};
9
10pub type Id = crate::NumberOrString;
11
12#[derive(Debug, PartialEq, Serialize, Deserialize)]
13#[serde(untagged)]
14pub enum LocationOrRangeId {
15 Location(crate::Location),
16 RangeId(Id),
17}
18
19#[derive(Debug, PartialEq, Serialize, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct Entry {
22 pub id: Id,
23 #[serde(flatten)]
24 pub data: Element,
25}
26
27#[derive(Debug, PartialEq, Serialize, Deserialize)]
28#[serde(rename_all = "camelCase")]
29#[serde(tag = "type")]
30pub enum Element {
31 Vertex(Vertex),
32 Edge(Edge),
33}
34
35#[derive(Debug, PartialEq, Serialize, Deserialize)]
36pub struct ToolInfo {
37 pub name: String,
38 #[serde(default = "Default::default")]
39 #[serde(skip_serializing_if = "Vec::is_empty")]
40 pub args: Vec<String>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub version: Option<String>,
43}
44
45#[derive(Debug, PartialEq, Serialize, Deserialize, Clone, Copy)]
46pub enum Encoding {
47 #[serde(rename = "utf-8")]
48 Utf8,
49 #[serde(rename = "utf-16")]
50 Utf16,
51 #[serde(rename = "utf-32")]
52 Utf32,
53}
54
55#[derive(Debug, PartialEq, Serialize, Deserialize)]
56pub struct RangeBasedDocumentSymbol {
57 pub id: Id,
58 #[serde(default = "Default::default")]
59 #[serde(skip_serializing_if = "Vec::is_empty")]
60 pub children: Vec<RangeBasedDocumentSymbol>,
61}
62
63#[derive(Debug, PartialEq, Serialize, Deserialize)]
64#[serde(rename_all = "camelCase")]
65#[serde(untagged)]
66pub enum DocumentSymbolOrRangeBasedVec {
67 DocumentSymbol(Vec<crate::DocumentSymbol>),
68 RangeBased(Vec<RangeBasedDocumentSymbol>),
69}
70
71#[derive(Debug, PartialEq, Serialize, Deserialize)]
72#[serde(rename_all = "camelCase")]
73pub struct DefinitionTag {
74 pub text: String,
76 pub kind: crate::SymbolKind,
78 #[serde(default)]
80 #[serde(skip_serializing_if = "std::ops::Not::not")]
81 pub deprecated: bool,
82 pub full_range: Range,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub detail: Option<String>,
88}
89
90#[derive(Debug, PartialEq, Serialize, Deserialize)]
91#[serde(rename_all = "camelCase")]
92pub struct DeclarationTag {
93 pub text: String,
95 pub kind: crate::SymbolKind,
97 #[serde(default)]
99 pub deprecated: bool,
100 pub full_range: Range,
103 #[serde(skip_serializing_if = "Option::is_none")]
105 pub detail: Option<String>,
106}
107
108#[derive(Debug, PartialEq, Serialize, Deserialize)]
109#[serde(rename_all = "camelCase")]
110pub struct ReferenceTag {
111 pub text: String,
112}
113
114#[derive(Debug, PartialEq, Serialize, Deserialize)]
115#[serde(rename_all = "camelCase")]
116pub struct UnknownTag {
117 pub text: String,
118}
119
120#[derive(Debug, PartialEq, Serialize, Deserialize)]
121#[serde(rename_all = "camelCase")]
122#[serde(tag = "type")]
123pub enum RangeTag {
124 Definition(DefinitionTag),
125 Declaration(DeclarationTag),
126 Reference(ReferenceTag),
127 Unknown(UnknownTag),
128}
129
130#[derive(Debug, PartialEq, Serialize, Deserialize)]
131#[serde(rename_all = "camelCase")]
132#[serde(tag = "label")]
133pub enum Vertex {
134 MetaData(MetaData),
135 Project(Project),
137 Document(Document),
138 Range {
140 #[serde(flatten)]
141 range: Range,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 tag: Option<RangeTag>,
144 },
145 ResultSet(ResultSet),
147 Moniker(crate::Moniker),
148 PackageInformation(PackageInformation),
149
150 #[serde(rename = "$event")]
151 Event(Event),
152
153 DefinitionResult,
154 DeclarationResult,
155 TypeDefinitionResult,
156 ReferenceResult,
157 ImplementationResult,
158 FoldingRangeResult {
159 result: Vec<crate::FoldingRange>,
160 },
161 HoverResult {
162 result: crate::Hover,
163 },
164 DocumentSymbolResult {
165 result: DocumentSymbolOrRangeBasedVec,
166 },
167 DocumentLinkResult {
168 result: Vec<crate::DocumentLink>,
169 },
170 DiagnosticResult {
171 result: Vec<crate::Diagnostic>,
172 },
173}
174
175#[derive(Debug, PartialEq, Serialize, Deserialize)]
176#[serde(rename_all = "camelCase")]
177pub enum EventKind {
178 Begin,
179 End,
180}
181
182#[derive(Debug, PartialEq, Serialize, Deserialize)]
183#[serde(rename_all = "camelCase")]
184pub enum EventScope {
185 Document,
186 Project,
187}
188
189#[derive(Debug, PartialEq, Serialize, Deserialize)]
190pub struct Event {
191 pub kind: EventKind,
192 pub scope: EventScope,
193 pub data: Id,
194}
195
196#[derive(Debug, PartialEq, Serialize, Deserialize)]
197#[serde(rename_all = "camelCase")]
198#[serde(tag = "label")]
199pub enum Edge {
200 Contains(EdgeDataMultiIn),
201 Moniker(EdgeData),
202 NextMoniker(EdgeData),
203 Next(EdgeData),
204 PackageInformation(EdgeData),
205 Item(Item),
206
207 #[serde(rename = "textDocument/definition")]
209 Definition(EdgeData),
210 #[serde(rename = "textDocument/declaration")]
211 Declaration(EdgeData),
212 #[serde(rename = "textDocument/hover")]
213 Hover(EdgeData),
214 #[serde(rename = "textDocument/references")]
215 References(EdgeData),
216 #[serde(rename = "textDocument/implementation")]
217 Implementation(EdgeData),
218 #[serde(rename = "textDocument/typeDefinition")]
219 TypeDefinition(EdgeData),
220 #[serde(rename = "textDocument/foldingRange")]
221 FoldingRange(EdgeData),
222 #[serde(rename = "textDocument/documentLink")]
223 DocumentLink(EdgeData),
224 #[serde(rename = "textDocument/documentSymbol")]
225 DocumentSymbol(EdgeData),
226 #[serde(rename = "textDocument/diagnostic")]
227 Diagnostic(EdgeData),
228}
229
230#[derive(Debug, PartialEq, Serialize, Deserialize)]
231#[serde(rename_all = "camelCase")]
232pub struct EdgeData {
233 pub in_v: Id,
234 pub out_v: Id,
235}
236
237#[derive(Debug, PartialEq, Serialize, Deserialize)]
238#[serde(rename_all = "camelCase")]
239pub struct EdgeDataMultiIn {
240 pub in_vs: Vec<Id>,
241 pub out_v: Id,
242}
243
244#[derive(Debug, PartialEq, Serialize, Deserialize)]
245#[serde(untagged)]
246pub enum DefinitionResultType {
247 Scalar(LocationOrRangeId),
248 Array(LocationOrRangeId),
249}
250
251#[derive(Debug, PartialEq, Serialize, Deserialize)]
252#[serde(rename_all = "camelCase")]
253pub enum ItemKind {
254 Declarations,
255 Definitions,
256 References,
257 ReferenceResults,
258 ImplementationResults,
259}
260
261#[derive(Debug, PartialEq, Serialize, Deserialize)]
262#[serde(rename_all = "camelCase")]
263pub struct Item {
264 pub document: Id,
265 #[serde(skip_serializing_if = "Option::is_none")]
266 pub property: Option<ItemKind>,
267 #[serde(flatten)]
268 pub edge_data: EdgeDataMultiIn,
269}
270
271#[derive(Debug, PartialEq, Serialize, Deserialize)]
272#[serde(rename_all = "camelCase")]
273pub struct Document {
274 pub uri: Uri,
275 pub language_id: String,
276}
277
278#[derive(Debug, PartialEq, Serialize, Deserialize)]
280#[serde(rename_all = "camelCase")]
281pub struct ResultSet {
282 #[serde(skip_serializing_if = "Option::is_none")]
283 pub key: Option<String>,
284}
285
286#[derive(Debug, PartialEq, Serialize, Deserialize)]
288#[serde(rename_all = "camelCase")]
289pub struct Project {
290 #[serde(skip_serializing_if = "Option::is_none")]
291 pub resource: Option<Uri>,
292 #[serde(skip_serializing_if = "Option::is_none")]
293 pub content: Option<String>,
294 pub kind: String,
295}
296
297#[derive(Debug, PartialEq, Serialize, Deserialize)]
298#[serde(rename_all = "camelCase")]
299pub struct MetaData {
300 pub version: String,
304
305 pub project_root: Uri,
307
308 pub position_encoding: Encoding,
311
312 #[serde(skip_serializing_if = "Option::is_none")]
314 pub tool_info: Option<ToolInfo>,
315}
316
317#[derive(Debug, PartialEq, Serialize, Deserialize)]
318#[serde(rename_all = "camelCase")]
319pub struct Repository {
320 pub r#type: String,
321 pub url: String,
322 #[serde(skip_serializing_if = "Option::is_none")]
323 pub commit_id: Option<String>,
324}
325
326#[derive(Debug, PartialEq, Serialize, Deserialize)]
327#[serde(rename_all = "camelCase")]
328pub struct PackageInformation {
329 pub name: String,
330 pub manager: String,
331 #[serde(skip_serializing_if = "Option::is_none")]
332 pub uri: Option<Uri>,
333 #[serde(skip_serializing_if = "Option::is_none")]
334 pub content: Option<String>,
335 #[serde(skip_serializing_if = "Option::is_none")]
336 pub repository: Option<Repository>,
337 #[serde(skip_serializing_if = "Option::is_none")]
338 pub version: Option<String>,
339}