use casper_types::Digest;
use crate::global_state::{error::Error as GlobalStateError, trie::TrieRaw};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct TrieRequest {
trie_key: Digest,
chunk_id: Option<u64>,
}
impl TrieRequest {
pub fn new(trie_key: Digest, chunk_id: Option<u64>) -> Self {
TrieRequest { trie_key, chunk_id }
}
pub fn trie_key(&self) -> Digest {
self.trie_key
}
pub fn chunk_id(&self) -> Option<u64> {
self.chunk_id
}
pub fn has_chunk_id(&self) -> bool {
self.chunk_id.is_some()
}
}
#[derive(Debug)]
pub enum TrieElement {
Raw(TrieRaw),
Chunked(TrieRaw, u64),
}
#[derive(Debug)]
pub enum TrieResult {
ValueNotFound(String),
Success {
element: TrieElement,
},
Failure(GlobalStateError),
}
impl TrieResult {
pub fn into_raw(self) -> Result<Option<TrieRaw>, GlobalStateError> {
match self {
TrieResult::ValueNotFound(_) => Ok(None),
TrieResult::Success { element } => match element {
TrieElement::Raw(raw) | TrieElement::Chunked(raw, _) => Ok(Some(raw)),
},
TrieResult::Failure(err) => Err(err),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PutTrieRequest {
raw: TrieRaw,
}
impl PutTrieRequest {
pub fn new(raw: TrieRaw) -> Self {
PutTrieRequest { raw }
}
pub fn raw(&self) -> &TrieRaw {
&self.raw
}
pub fn take_raw(self) -> TrieRaw {
self.raw
}
}
#[derive(Debug)]
pub enum PutTrieResult {
Success {
hash: Digest,
},
Failure(GlobalStateError),
}
impl PutTrieResult {
pub fn as_legacy(&self) -> Result<Digest, GlobalStateError> {
match self {
PutTrieResult::Success { hash } => Ok(*hash),
PutTrieResult::Failure(err) => Err(err.clone()),
}
}
}