Skip to content

Commit 0c317d7

Browse files
committed
fix(rpc - rust part): handle error responses from JSON-RPC
1 parent 8c57974 commit 0c317d7

2 files changed

Lines changed: 25 additions & 3 deletions

File tree

rustCode/src/models/mod.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,19 @@ pub struct RPCResponseBlock {
55
pub result: SimpleBlock,
66
}
77

8+
#[derive(Debug, Deserialize)]
9+
pub struct JsonRpcError {
10+
pub code: i64,
11+
pub message: String,
12+
}
13+
14+
#[derive(Debug, Deserialize)]
15+
pub struct JsonRpcResponse<T> {
16+
pub result: Option<T>,
17+
pub error: Option<JsonRpcError>,
18+
}
19+
20+
821
#[derive(Debug, Deserialize)]
922
#[serde(rename_all = "camelCase")]
1023
pub struct SimpleBlock {

rustCode/src/rpc/fetch.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::models::{RPCResponseBlock, RPCResponseReceipt, SimpleBlock, TransactionReceipt, TxSummary};
1+
use crate::models::{RPCResponseBlock, JsonRpcResponse, RPCResponseReceipt, SimpleBlock, TransactionReceipt, TxSummary};
22
use reqwest::Client;
33
use serde_json::json;
44
use std::sync::Arc;
@@ -20,9 +20,18 @@ pub async fn fetch_latest_block(rpc_url: &str, transaction_bool: bool) -> Simple
2020
.await
2121
.expect("Greska pri slanju zahteva");
2222

23-
let resp_json: RPCResponseBlock = resp.json().await.expect("Greska pri parsiranju odgovora");
23+
let rpc_resp: JsonRpcResponse<SimpleBlock> = resp.json().await.expect("Greska pri parsiranju RPC odgovora");
2424

25-
resp_json.result
25+
if let Some(err) = rpc_resp.error {
26+
panic!(
27+
"RPC greska (code={}): {}",
28+
err.code, err.message
29+
);
30+
}
31+
32+
rpc_resp
33+
.result
34+
.expect("RPC odgovor nema result polje")
2635
}
2736

2837
pub async fn fetch_block_by_number(rpc_url: &str, block_number: &str, transaction_bool: bool

0 commit comments

Comments
 (0)