diem_json_rpc_types/
response.rs1use crate::errors::JsonRpcError;
5use serde::{Deserialize, Serialize};
6
7pub const X_DIEM_CHAIN_ID: &str = "X-Diem-Chain-Id";
9pub const X_DIEM_VERSION_ID: &str = "X-Diem-Ledger-Version";
10pub const X_DIEM_TIMESTAMP_USEC_ID: &str = "X-Diem-Ledger-TimestampUsec";
11
12#[derive(Clone, Serialize, Deserialize, Debug)]
13pub struct JsonRpcResponse {
14 pub diem_chain_id: u8,
15 pub diem_ledger_version: u64,
16 pub diem_ledger_timestampusec: u64,
17
18 pub jsonrpc: String,
19
20 pub id: Option<serde_json::Value>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub result: Option<serde_json::Value>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub error: Option<JsonRpcError>,
25}
26
27impl JsonRpcResponse {
28 pub fn new(
29 chain_id: diem_types::chain_id::ChainId,
30 diem_ledger_version: u64,
31 diem_ledger_timestampusec: u64,
32 ) -> Self {
33 Self {
34 diem_chain_id: chain_id.id(),
35 diem_ledger_version,
36 diem_ledger_timestampusec,
37 jsonrpc: "2.0".to_string(),
38 id: None,
39 result: None,
40 error: None,
41 }
42 }
43}
44
45#[cfg(test)]
46mod tests {
47 use crate::response::JsonRpcResponse;
48 use diem_types::chain_id::ChainId;
49
50 #[test]
51 fn test_new() {
52 let resp = JsonRpcResponse::new(ChainId::test(), 1, 2);
53 assert_eq!(resp.jsonrpc, "2.0");
54 assert_eq!(resp.diem_chain_id, 4);
55 assert_eq!(resp.diem_ledger_version, 1);
56 assert_eq!(resp.diem_ledger_timestampusec, 2);
57 assert!(resp.id.is_none());
58 assert!(resp.result.is_none());
59 assert!(resp.error.is_none());
60 }
61}