casper_storage/data_access_layer/
query.rs1use casper_types::{global_state::TrieMerkleProof, Digest, Key, StoredValue};
3
4use crate::tracking_copy::{TrackingCopyError, TrackingCopyQueryResult};
5
6#[derive(Debug, Clone, PartialEq, Eq)]
8pub struct QueryRequest {
9 state_hash: Digest,
10 key: Key,
11 path: Vec<String>,
12}
13
14impl QueryRequest {
15 pub fn new(state_hash: Digest, key: Key, path: Vec<String>) -> Self {
17 QueryRequest {
18 state_hash,
19 key,
20 path,
21 }
22 }
23
24 pub fn state_hash(&self) -> Digest {
26 self.state_hash
27 }
28
29 pub fn key(&self) -> Key {
31 self.key
32 }
33
34 pub fn path(&self) -> &[String] {
36 &self.path
37 }
38}
39
40impl From<TrackingCopyQueryResult> for QueryResult {
41 fn from(tracking_copy_query_result: TrackingCopyQueryResult) -> Self {
42 match tracking_copy_query_result {
43 TrackingCopyQueryResult::ValueNotFound(message) => QueryResult::ValueNotFound(message),
44 TrackingCopyQueryResult::CircularReference(message) => {
45 QueryResult::Failure(TrackingCopyError::CircularReference(message))
46 }
47 TrackingCopyQueryResult::Success { value, proofs } => {
48 let value = Box::new(value);
49 QueryResult::Success { value, proofs }
50 }
51 TrackingCopyQueryResult::DepthLimit { depth } => {
52 QueryResult::Failure(TrackingCopyError::QueryDepthLimit { depth })
53 }
54 TrackingCopyQueryResult::RootNotFound => QueryResult::RootNotFound,
55 }
56 }
57}
58
59#[derive(Debug)]
61pub enum QueryResult {
62 RootNotFound,
64 ValueNotFound(String),
66 Success {
68 value: Box<StoredValue>,
70 proofs: Vec<TrieMerkleProof<Key, StoredValue>>,
72 },
73 Failure(TrackingCopyError),
75}