use std::sync;
use thiserror::Error;
use casper_types::{bytesrepr, Digest, Key};
use crate::global_state::{state::CommitError, trie::TrieRaw};
use super::trie_store::TrieStoreCacheError;
#[derive(Debug, Clone, Error, PartialEq, Eq)]
#[non_exhaustive]
pub enum Error {
#[error(transparent)]
Lmdb(#[from] lmdb::Error),
#[error("{0}")]
BytesRepr(#[from] bytesrepr::Error),
#[error("Another thread panicked while holding a lock")]
Poison,
#[error(transparent)]
Commit(#[from] CommitError),
#[error("RootNotFound")]
RootNotFound,
#[error("Failed to put a trie into global state because some of its children were missing")]
MissingTrieNodeChildren(Digest, TrieRaw, Vec<Digest>),
#[error("Pruning attempt failed.")]
FailedToPrune(Vec<Key>),
#[error("Attempt to generate proofs using non-empty cache.")]
CannotProvideProofsOverCachedData,
#[error("Cache error")]
CacheError(#[from] TrieStoreCacheError),
}
impl<T> From<sync::PoisonError<T>> for Error {
fn from(_error: sync::PoisonError<T>) -> Self {
Error::Poison
}
}