essential_builder/
error.rsuse essential_builder_db as builder_db;
use essential_check::solution::PredicatesError;
use essential_node as node;
use essential_node_db as node_db;
use essential_types::{predicate::header::DecodeError, ContentAddress, Key};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum BuildBlockError {
#[error("A builder DB query error occurred: {0}")]
BuilderQuery(#[from] builder_db::error::AcquireThenQueryError),
#[error("A builder DB rusqlite error occurred: {0}")]
BuilderRusqlite(#[from] builder_db::error::AcquireThenRusqliteError),
#[error("A node DB rusqlite error occurred: {0}")]
NodeRusqlite(#[from] node::db::AcquireThenRusqliteError),
#[error("Failed to check and apply solutions: {0}")]
CheckSolutions(#[from] CheckSolutionsError),
#[error("System time produced non-monotonic timestamp")]
TimestampNotMonotonic,
#[error("System timestamp is out of range of `Word`")]
TimestampOutOfRange,
#[error("Failed to retrieve the last block header")]
LastBlockHeader(#[from] node::db::AcquireThenError<LastBlockHeaderError>),
#[error("The next block number would be out of `u64` range")]
BlockNumberOutOfRange,
}
#[derive(Debug, Error)]
pub enum LastBlockHeaderError {
#[error("A rusqlite error occurred: {0}")]
Rusqlite(#[from] rusqlite::Error),
#[error("A node DB query error occurred: {0}")]
Query(#[from] node_db::QueryError),
#[error("The node DB contained no number for the last finalized block")]
NoNumberForLastFinalizedBlock,
#[error("The node DB contained no timestamp for the last finalized block")]
NoTimestampForLastFinalizedBlock,
}
#[derive(Debug, Error)]
pub enum CheckSolutionsError {
#[error("an error occurred while attempting to apply a solution: {0}")]
CheckSolution(#[from] CheckSolutionError),
}
#[derive(Debug, Error)]
pub enum CheckSolutionError {
#[error("a rusqlite error occurred: {0}")]
Rusqlite(#[from] rusqlite::Error),
#[error("a node DB query failed: {0}")]
NodeQuery(#[from] node::db::AcquireThenQueryError),
}
#[derive(Debug, Error)]
pub enum SolutionPredicatesError {
#[error("an error occurred while querying for a predicate from the node DB: {0}")]
QueryPredicate(#[from] QueryPredicateError),
#[error("the node DB is missing a required predicate ({0})")]
PredicateDoesNotExist(ContentAddress),
}
#[derive(Debug, Error)]
pub enum InvalidSolution {
#[error("Solution specified a predicate to solve that does not exist")]
PredicateDoesNotExist(ContentAddress),
#[error(
"Solution specified a predicate that was invalid when reading from contract registry state"
)]
PredicateInvalid,
#[error("Validation of the solution predicates failed: {0}")]
Predicates(PredicatesError<StateReadError>),
}
#[derive(Debug, Error)]
pub enum StateReadError {
#[error("a state query failed: {0}")]
Query(#[from] node::db::AcquireThenQueryError),
#[error("No entry exists for the given key {0:?}")]
NoEntry(Key),
#[error("A key would be out of range: `key` {key:?}, `num_values` {num_values}")]
OutOfRange { key: Key, num_values: usize },
}
#[derive(Debug, Error)]
pub enum QueryPredicateError {
#[error("failed to query the node DB: {0}")]
ConnPoolQuery(#[from] node::db::AcquireThenQueryError),
#[error("the queried predicate is missing the word that encodes its length")]
MissingLenBytes,
#[error("the queried predicate length was invalid")]
InvalidLenBytes,
#[error("failed to decode the queried predicate: {0}")]
Decode(#[from] DecodeError),
}