1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct LocationInfo {
5 pub path: String,
6 pub line: u32,
7 #[serde(default)]
8 pub column: u32,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub context_lines: Option<Vec<String>>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub context_start: Option<u32>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub name: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub kind: Option<String>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub detail: Option<String>,
19}
20
21impl LocationInfo {
22 pub fn new(path: String, line: u32) -> Self {
23 Self {
24 path,
25 line,
26 column: 0,
27 context_lines: None,
28 context_start: None,
29 name: None,
30 kind: None,
31 detail: None,
32 }
33 }
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct FileInfo {
38 pub path: String,
39 pub lines: u32,
40 pub bytes: u64,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct CacheInfo {
45 pub current_bytes: u64,
46 pub max_bytes: u64,
47 pub entries: u64,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct WorkspaceInfo {
52 pub root: String,
53 pub language: String,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub server_pid: Option<u32>,
56 pub open_documents: Vec<String>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct CallNode {
61 pub name: String,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub kind: Option<String>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub detail: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub path: Option<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub line: Option<u32>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub column: Option<u32>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub calls: Option<Vec<CallNode>>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub called_by: Option<Vec<CallNode>>,
76}
77
78impl CallNode {
79 pub fn new(name: String) -> Self {
80 Self {
81 name,
82 kind: None,
83 detail: None,
84 path: None,
85 line: None,
86 column: None,
87 calls: None,
88 called_by: None,
89 }
90 }
91}