casper_storage/data_access_layer/
trie.rs1use casper_types::Digest;
2
3use crate::global_state::{error::Error as GlobalStateError, trie::TrieRaw};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub struct TrieRequest {
8 trie_key: Digest,
9 chunk_id: Option<u64>,
10}
11
12impl TrieRequest {
13 pub fn new(trie_key: Digest, chunk_id: Option<u64>) -> Self {
15 TrieRequest { trie_key, chunk_id }
16 }
17
18 pub fn trie_key(&self) -> Digest {
20 self.trie_key
21 }
22
23 pub fn chunk_id(&self) -> Option<u64> {
25 self.chunk_id
26 }
27
28 pub fn has_chunk_id(&self) -> bool {
30 self.chunk_id.is_some()
31 }
32}
33
34#[derive(Debug)]
36pub enum TrieElement {
37 Raw(TrieRaw),
39 Chunked(TrieRaw, u64),
41}
42
43#[derive(Debug)]
45pub enum TrieResult {
46 ValueNotFound(String),
48 Success {
50 element: TrieElement,
52 },
53 Failure(GlobalStateError),
55}
56
57impl TrieResult {
58 pub fn into_raw(self) -> Result<Option<TrieRaw>, GlobalStateError> {
60 match self {
61 TrieResult::ValueNotFound(_) => Ok(None),
62 TrieResult::Success { element } => match element {
63 TrieElement::Raw(raw) | TrieElement::Chunked(raw, _) => Ok(Some(raw)),
64 },
65 TrieResult::Failure(err) => Err(err),
66 }
67 }
68}
69
70#[derive(Debug, Clone, PartialEq, Eq)]
72pub struct PutTrieRequest {
73 raw: TrieRaw,
74}
75
76impl PutTrieRequest {
77 pub fn new(raw: TrieRaw) -> Self {
79 PutTrieRequest { raw }
80 }
81
82 pub fn raw(&self) -> &TrieRaw {
84 &self.raw
85 }
86
87 pub fn take_raw(self) -> TrieRaw {
89 self.raw
90 }
91}
92
93#[derive(Debug)]
95pub enum PutTrieResult {
96 Success {
98 hash: Digest,
100 },
101 Failure(GlobalStateError),
103}
104
105impl PutTrieResult {
106 pub fn as_legacy(&self) -> Result<Digest, GlobalStateError> {
108 match self {
109 PutTrieResult::Success { hash } => Ok(*hash),
110 PutTrieResult::Failure(err) => Err(err.clone()),
111 }
112 }
113}