cosmos_client/client/
evidence.rs

1use 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    /// # Errors
22    ///
23    /// Will return `Err` if :
24    /// - a prost encode / decode fail
25    /// - the json-rpc return an error code
26    /// - if there is some network error
27    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    /// # Errors
49    ///
50    /// Will return `Err` if :
51    /// - a prost encode / decode fail
52    /// - the json-rpc return an error code
53    /// - if there is some network error
54    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}