diem_json_rpc_types/
response.rs

1// Copyright (c) The Diem Core Contributors
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::errors::JsonRpcError;
5use serde::{Deserialize, Serialize};
6
7// http response header names
8pub 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}