Skip to content

Commit 9d37598

Browse files
apollo_storage: add storage reader client
1 parent 02e0430 commit 9d37598

File tree

4 files changed

+49
-1
lines changed

4 files changed

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

crates/apollo_storage/src/db/table_types/dup_sort_tables.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ impl<'env, K: KeyTrait + Debug, V: ValueSerde + Debug, T: DupSortTableType + Dup
189189

190190
let sub_key = T::get_sub_key(key)?;
191191
if let Some(mut bytes) = bytes.strip_prefix(sub_key.as_slice()) {
192-
let value = V::deserialize(&mut bytes).ok_or(DbError::InnerDeserialization)?;
192+
let value = V::Value::deserialize(&mut bytes).ok_or(DbError::InnerDeserialization)?;
193193
return Ok(Some(value));
194194
}
195195
Ok(None)

0 commit comments

Comments
 (0)