1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct JsonRpcRequest {
6 pub jsonrpc: String,
7 pub method: String,
8 pub params: Option<Value>,
9 pub id: Option<Value>,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct JsonRpcResponse {
14 pub jsonrpc: String,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub result: Option<Value>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub error: Option<JsonRpcError>,
19 pub id: Option<Value>,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct JsonRpcError {
24 pub code: i64,
25 pub message: String,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub data: Option<Value>,
28}
29
30impl JsonRpcResponse {
31 pub fn success(id: Option<Value>, result: Value) -> Self {
32 Self {
33 jsonrpc: "2.0".into(),
34 result: Some(result),
35 error: None,
36 id,
37 }
38 }
39
40 pub fn error(id: Option<Value>, code: i64, message: String) -> Self {
41 Self {
42 jsonrpc: "2.0".into(),
43 result: None,
44 error: Some(JsonRpcError { code, message, data: None }),
45 id,
46 }
47 }
48}
49
50