voirs_cli/lsp/
protocol.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct RequestMessage {
8 pub jsonrpc: String,
10
11 pub id: i64,
13
14 pub method: String,
16
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub params: Option<serde_json::Value>,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct ResponseMessage {
25 pub jsonrpc: String,
27
28 pub id: i64,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub result: Option<serde_json::Value>,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub error: Option<ResponseError>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct NotificationMessage {
43 pub jsonrpc: String,
45
46 pub method: String,
48
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub params: Option<serde_json::Value>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct ResponseError {
57 pub code: i32,
59
60 pub message: String,
62
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub data: Option<serde_json::Value>,
66}
67
68#[cfg(test)]
69mod tests {
70 use super::*;
71
72 #[test]
73 fn test_request_message_serialization() {
74 let request = RequestMessage {
75 jsonrpc: "2.0".to_string(),
76 id: 1,
77 method: "initialize".to_string(),
78 params: None,
79 };
80
81 let json = serde_json::to_string(&request).unwrap();
82 assert!(json.contains("\"jsonrpc\":\"2.0\""));
83 assert!(json.contains("\"method\":\"initialize\""));
84 }
85
86 #[test]
87 fn test_response_message_serialization() {
88 let response = ResponseMessage {
89 jsonrpc: "2.0".to_string(),
90 id: 1,
91 result: Some(serde_json::json!({"status": "ok"})),
92 error: None,
93 };
94
95 let json = serde_json::to_string(&response).unwrap();
96 assert!(json.contains("\"result\""));
97 }
98}