cosmos_client/client/
feegrant.rs1use crate::error::CosmosClient;
2use crate::error::CosmosClient::{ProstDecodeError, RpcError};
3use cosmos_sdk_proto::cosmos::base::query::v1beta1::PageRequest;
4use cosmos_sdk_proto::cosmos::feegrant::v1beta1::{
5 QueryAllowanceRequest, QueryAllowanceResponse, QueryAllowancesRequest, QueryAllowancesResponse,
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 #[allow(clippy::similar_names)]
28 pub async fn allowance(
29 &self,
30 granter: &str,
31 grantee: &str,
32 ) -> Result<QueryAllowanceResponse, CosmosClient> {
33 let query = QueryAllowanceRequest {
34 granter: granter.to_string(),
35 grantee: grantee.to_string(),
36 };
37 let query = self
38 .rpc
39 .abci_query(
40 Some("/cosmos.feegrant.v1beta1.Query/Allowance".to_string()),
41 query.encode_to_vec(),
42 None,
43 false,
44 )
45 .await?;
46
47 if query.code != Code::Ok {
48 return Err(RpcError(query.log));
49 }
50 QueryAllowanceResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
51 }
52
53 pub async fn allowances(
60 &self,
61 grantee: &str,
62 pagination: Option<PageRequest>,
63 ) -> Result<QueryAllowancesResponse, CosmosClient> {
64 let query = QueryAllowancesRequest {
65 grantee: grantee.to_string(),
66 pagination,
67 };
68 let query = self
69 .rpc
70 .abci_query(
71 Some("/cosmos.feegrant.v1beta1.Query/Allowances".to_string()),
72 query.encode_to_vec(),
73 None,
74 false,
75 )
76 .await?;
77
78 if query.code != Code::Ok {
79 return Err(RpcError(query.log));
80 }
81 QueryAllowancesResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
82 }
83}