1use evm_rpc_canister_types::{EvmRpcCanister, RequestResult, RpcService};
3use serde::{Deserialize, Serialize};
4
5use crate::request_cost::request_cost;
6
7pub async fn request(
20 rpc_service: RpcService,
21 json_rpc_payload: String,
22 max_response_bytes: u64,
23 evm_rpc: EvmRpcCanister,
24) -> RequestResult {
25 let cycles = request_cost(
27 rpc_service.clone(),
28 json_rpc_payload.clone(),
29 max_response_bytes,
30 evm_rpc.clone(),
31 )
32 .await;
33 match evm_rpc
35 .request(rpc_service, json_rpc_payload, max_response_bytes, cycles)
36 .await
37 {
38 Ok((res,)) => res,
39 Err(e) => ic_cdk::trap(format!("Error: {:?}", e).as_str()),
40 }
41}
42
43#[derive(Clone, Debug, Serialize, Deserialize)]
45pub struct JsonRpcResult {
46 pub result: Option<String>,
47 pub error: Option<JsonRpcError>,
48}
49
50#[derive(Clone, Debug, Serialize, Deserialize)]
52pub struct JsonRpcError {
53 pub code: isize,
54 pub message: String,
55}