sui_rpc_benchmark/json_rpc/
request_loader.rs1use anyhow::{Context, Result};
7use chrono::{DateTime, Utc};
8use serde::Deserialize;
9use serde_json::Value;
10use std::{
11 fs::File,
12 io::{BufRead, BufReader},
13};
14
15mod timestamp {
16 use chrono::{DateTime, Utc};
17 use serde::{self, Deserialize, Deserializer};
18
19 pub fn deserialize<'de, D>(deserializer: D) -> Result<DateTime<Utc>, D::Error>
20 where
21 D: Deserializer<'de>,
22 {
23 let s = String::deserialize(deserializer)?;
24 DateTime::parse_from_rfc3339(&s)
25 .map(|dt| dt.with_timezone(&Utc))
26 .map_err(serde::de::Error::custom)
27 }
28}
29
30#[derive(Clone, Debug, Deserialize)]
31pub struct JsonRpcRequestLine {
32 pub method: String,
33 #[serde(rename = "body")]
34 pub body_json: Value,
35 #[serde(with = "timestamp")]
36 pub timestamp: DateTime<Utc>,
37}
38
39pub fn load_json_rpc_requests(file_path: &str) -> Result<Vec<JsonRpcRequestLine>> {
40 let file = File::open(file_path)
41 .with_context(|| format!("Could not open JSON RPC file at {}", file_path))?;
42 let reader = BufReader::new(file);
43
44 let mut requests = Vec::new();
45 for line in reader.lines() {
47 let line = line?;
48 let request_line: JsonRpcRequestLine =
49 serde_json::from_str(&line).with_context(|| "Failed to parse JSON RPC line")?;
50 requests.push(request_line);
51 }
52
53 Ok(requests)
54}