cosmos_client/client/
evidence.rs1use crate::error::CosmosClient;
2use crate::error::CosmosClient::{ProstDecodeError, RpcError};
3use cosmos_sdk_proto::cosmos::base::query::v1beta1::PageRequest;
4use cosmos_sdk_proto::cosmos::evidence::v1beta1::{
5 QueryAllEvidenceRequest, QueryAllEvidenceResponse, QueryEvidenceRequest, QueryEvidenceResponse,
6};
7use prost::Message;
8use std::rc::Rc;
9use tendermint::abci::Code;
10use tendermint_rpc::{Client, HttpClient};
11
12pub struct Module {
13 rpc: Rc<HttpClient>,
14}
15
16impl Module {
17 pub fn new(rpc: Rc<HttpClient>) -> Self {
18 Module { rpc }
19 }
20
21 pub async fn evidence(
28 &self,
29 evidence_hash: Vec<u8>,
30 ) -> Result<QueryEvidenceResponse, CosmosClient> {
31 let query = QueryEvidenceRequest { evidence_hash };
32 let query = self
33 .rpc
34 .abci_query(
35 Some("/cosmos.evidence.v1beta1.Query/Evidence".to_string()),
36 query.encode_to_vec(),
37 None,
38 false,
39 )
40 .await?;
41
42 if query.code != Code::Ok {
43 return Err(RpcError(query.log));
44 }
45 QueryEvidenceResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
46 }
47
48 pub async fn all_evidence(
55 &self,
56 pagination: Option<PageRequest>,
57 ) -> Result<QueryAllEvidenceResponse, CosmosClient> {
58 let query = QueryAllEvidenceRequest { pagination };
59 let query = self
60 .rpc
61 .abci_query(
62 Some("/cosmos.evidence.v1beta1.Query/AllEvidence".to_string()),
63 query.encode_to_vec(),
64 None,
65 false,
66 )
67 .await?;
68
69 if query.code != Code::Ok {
70 return Err(RpcError(query.log));
71 }
72 QueryAllEvidenceResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
73 }
74}