terra_rust_api/client/
rpc.rs

1use crate::client::rpc_types::{RPCNetInfo, RPCResult, RPCStatus, RPCUnconfirmedTXS};
2use crate::tendermint_types::{BlockResult, BlockResultsResult};
3use crate::Terra;
4pub struct RPC<'a> {
5    terra: &'a Terra,
6    rpc_url: &'a str,
7}
8impl RPC<'_> {
9    pub fn create<'a>(terra: &'a Terra, tendermint_url: &'a str) -> RPC<'a> {
10        RPC {
11            terra,
12            rpc_url: tendermint_url,
13        }
14    }
15    pub async fn status(&self) -> anyhow::Result<RPCStatus> {
16        Ok(self
17            .terra
18            .send_cmd_url::<RPCResult<RPCStatus>>(self.rpc_url, "/status", None)
19            .await?
20            .result)
21    }
22    pub async fn net_info(&self) -> anyhow::Result<RPCNetInfo> {
23        Ok(self
24            .terra
25            .send_cmd_url::<RPCResult<RPCNetInfo>>(self.rpc_url, "/net_info", None)
26            .await?
27            .result)
28    }
29    pub async fn unconfirmed_txs(&self) -> anyhow::Result<RPCUnconfirmedTXS> {
30        Ok(self
31            .terra
32            .send_cmd_url::<RPCResult<RPCUnconfirmedTXS>>(self.rpc_url, "/unconfirmed_txs", None)
33            .await?
34            .result)
35    }
36    pub async fn block(&self) -> anyhow::Result<BlockResult> {
37        Ok(self
38            .terra
39            .send_cmd_url::<RPCResult<BlockResult>>(self.rpc_url, "/block", None)
40            .await?
41            .result)
42    }
43    pub async fn block_at_height(&self, height: u64) -> anyhow::Result<BlockResult> {
44        Ok(self
45            .terra
46            .send_cmd_url::<RPCResult<BlockResult>>(
47                self.rpc_url,
48                &format!("/block?height={}", height),
49                None,
50            )
51            .await?
52            .result)
53    }
54    pub async fn block_results(&self) -> anyhow::Result<BlockResultsResult> {
55        Ok(self
56            .terra
57            .send_cmd_url::<RPCResult<BlockResultsResult>>(self.rpc_url, "/block_results", None)
58            .await?
59            .result)
60    }
61    pub async fn block_results_at_height(&self, height: u64) -> anyhow::Result<BlockResultsResult> {
62        Ok(self
63            .terra
64            .send_cmd_url::<RPCResult<BlockResultsResult>>(
65                self.rpc_url,
66                &format!("/block_results?height={}", height),
67                None,
68            )
69            .await?
70            .result)
71    }
72}