Skip to content

Commit 5db84f4

Browse files
apollo_storage: add storage reader client
1 parent 02e0430 commit 5db84f4

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/apollo_storage/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ byteorder.workspace = true
1919
cairo-lang-casm = { workspace = true, features = ["parity-scale-codec"] }
2020
cairo-lang-starknet-classes.workspace = true
2121
cairo-lang-utils.workspace = true
22+
clap = { workspace = true, features = ["derive"] }
2223
human_bytes.workspace = true
2324
indexmap = { workspace = true, features = ["serde"] }
2425
integer-encoding.workspace = true
@@ -30,13 +31,14 @@ page_size.workspace = true
3031
papyrus_common.workspace = true
3132
parity-scale-codec.workspace = true
3233
primitive-types.workspace = true
34+
reqwest = { workspace = true, features = ["json"] }
3335
serde = { workspace = true, features = ["derive"] }
3436
serde_json = { workspace = true, features = ["arbitrary_precision"] }
3537
starknet-types-core = { workspace = true, features = ["papyrus-serialization"] }
3638
starknet_api.workspace = true
3739
tempfile = { workspace = true, optional = true }
3840
thiserror.workspace = true
39-
tokio.workspace = true
41+
tokio = { workspace = true, features = ["rt-multi-thread"] }
4042
tower = { workspace = true, optional = true }
4143
tracing = { workspace = true, features = ["log"] }
4244
validator = { workspace = true, features = ["derive"] }
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
use std::net::Ipv4Addr;
2+
3+
use apollo_storage::storage_reader_types::{StorageReaderRequest, StorageReaderResponse};
4+
use clap::Parser;
5+
use reqwest::Client;
6+
7+
#[derive(Parser, Debug)]
8+
#[command(name = "storage_cli", about = "Run storage CLI.")]
9+
struct Args {
10+
#[arg(long)]
11+
storage_reader_port: u16,
12+
13+
/// JSON-encoded request (e.g., '{"Markers":"State"}')
14+
#[arg(long)]
15+
request_json: String,
16+
}
17+
18+
#[tokio::main]
19+
async fn main() {
20+
let args = Args::parse();
21+
22+
// Parse the JSON string into a StorageReaderRequest
23+
let request: StorageReaderRequest = serde_json::from_str(&args.request_json)
24+
.expect("Failed to parse request JSON. Example: '{\"Markers\":\"State\"}'");
25+
26+
let client = Client::new();
27+
let url = format!("http://{Ipv4Addr::LOCALHOST}:{args.storage_reader_port}/storage/query");
28+
29+
let response = client
30+
.post(&url)
31+
.json(&request)
32+
.send()
33+
.await
34+
.expect("Failed to send request to storage reader");
35+
36+
if !response.status().is_success() {
37+
let error_text = response.text().await.expect("Failed to read error response");
38+
eprintln!("Error from storage reader: {}", error_text);
39+
return;
40+
}
41+
42+
let storage_response: StorageReaderResponse =
43+
response.json().await.expect("Failed to parse response from storage reader");
44+
45+
println!("Response: {:?}", storage_response);
46+
}

0 commit comments

Comments
 (0)