near_api/common/query/
query_rpc.rs

1use async_trait::async_trait;
2use near_openapi_client::types::{
3    JsonRpcRequestForQuery, JsonRpcRequestForQueryMethod,
4    JsonRpcResponseForRpcQueryResponseAndRpcError, RpcError, RpcQueryResponse,
5};
6
7use crate::{
8    NetworkConfig,
9    advanced::{RpcType, query_request::QueryRequest},
10    common::utils::is_critical_query_error,
11    config::RetryResponse,
12    errors::SendRequestError,
13};
14use near_api_types::Reference;
15
16#[derive(Clone, Debug)]
17pub struct SimpleQueryRpc {
18    pub request: QueryRequest,
19}
20
21#[async_trait]
22impl RpcType for SimpleQueryRpc {
23    type RpcReference = Reference;
24    type Response = RpcQueryResponse;
25    type Error = RpcError;
26    async fn send_query(
27        &self,
28        client: &near_openapi_client::Client,
29        _network: &NetworkConfig,
30        reference: &Reference,
31    ) -> RetryResponse<RpcQueryResponse, SendRequestError<RpcError>> {
32        let request = self.request.clone().to_rpc_query_request(reference.clone());
33        let response = client
34            .query(&JsonRpcRequestForQuery {
35                id: "0".to_string(),
36                jsonrpc: "2.0".to_string(),
37                method: JsonRpcRequestForQueryMethod::Query,
38                params: request,
39            })
40            .await
41            .map(|r| r.into_inner());
42        match response {
43            Ok(JsonRpcResponseForRpcQueryResponseAndRpcError::Variant0 { result, .. }) => {
44                RetryResponse::Ok(result)
45            }
46            Ok(JsonRpcResponseForRpcQueryResponseAndRpcError::Variant1 { error, .. }) => {
47                if is_critical_query_error(&error) {
48                    RetryResponse::Critical(SendRequestError::ServerError(error))
49                } else {
50                    RetryResponse::Retry(SendRequestError::ServerError(error))
51                }
52            }
53            Err(err) => RetryResponse::Critical(SendRequestError::ClientError(err)),
54        }
55    }
56}