cosmos_client/client/
auth.rs

1use crate::error::CosmosClient;
2use crate::error::CosmosClient::{ProstDecodeError, RpcError};
3use cosmos_sdk_proto::cosmos::auth::v1beta1::{
4    QueryAccountRequest, QueryAccountResponse, QueryAccountsRequest, QueryAccountsResponse,
5    QueryParamsRequest, QueryParamsResponse,
6};
7use cosmos_sdk_proto::cosmos::base::query::v1beta1::PageRequest;
8use prost::Message;
9use std::rc::Rc;
10use tendermint::abci::Code;
11use tendermint_rpc::{Client, HttpClient};
12
13pub struct Module {
14    rpc: Rc<HttpClient>,
15}
16
17impl Module {
18    pub fn new(rpc: Rc<HttpClient>) -> Self {
19        Module { rpc }
20    }
21
22    /// # Errors
23    ///
24    /// Will return `Err` if :
25    /// - a prost encode / decode fail
26    /// - the json-rpc return an error code
27    /// - if there is some network error
28    pub async fn accounts(
29        &self,
30        pagination: Option<PageRequest>,
31    ) -> Result<QueryAccountsResponse, CosmosClient> {
32        let query = QueryAccountsRequest { pagination };
33        let query = self
34            .rpc
35            .abci_query(
36                Some("/cosmos.auth.v1beta1.Query/Accounts".to_string()),
37                query.encode_to_vec(),
38                None,
39                false,
40            )
41            .await?;
42
43        if query.code != Code::Ok {
44            return Err(RpcError(query.log));
45        }
46        QueryAccountsResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
47    }
48
49    /// # Errors
50    ///
51    /// Will return `Err` if :
52    /// - a prost encode / decode fail
53    /// - the json-rpc return an error code
54    /// - if there is some network error
55    pub async fn account(&self, address: &str) -> Result<QueryAccountResponse, CosmosClient> {
56        let query = QueryAccountRequest {
57            address: address.to_string(),
58        };
59        let query = self
60            .rpc
61            .abci_query(
62                Some("/cosmos.auth.v1beta1.Query/Account".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        QueryAccountResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
73    }
74
75    /// # Errors
76    ///
77    /// Will return `Err` if :
78    /// - a prost encode / decode fail
79    /// - the json-rpc return an error code
80    /// - if there is some network error
81    pub async fn params(&self) -> Result<QueryParamsResponse, CosmosClient> {
82        let query = QueryParamsRequest {};
83        let query = self
84            .rpc
85            .abci_query(
86                Some("/cosmos.auth.v1beta1.Query/Params".to_string()),
87                query.encode_to_vec(),
88                None,
89                false,
90            )
91            .await?;
92
93        if query.code != Code::Ok {
94            return Err(RpcError(query.log));
95        }
96        QueryParamsResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
97    }
98}