#![deny(clippy::arithmetic_side_effects)]
#![deny(clippy::cast_possible_truncation)]
#![deny(missing_docs)]
#![deny(unused_crate_dependencies)]
#![deny(warnings)]
#![deny(unused_variables)]
use fuel_core_storage::{
Error as StorageError,
transactional::ReferenceBytesKey,
};
use fuel_core_types::services::executor::Error as ExecutorError;
#[derive(Debug, derive_more::Display, derive_more::From)]
#[non_exhaustive]
#[allow(missing_docs)]
pub enum Error {
#[display("error performing serialization or deserialization")]
Codec,
#[display("Invalid database version, expected {expected:#x}, found {found:#x}")]
InvalidDatabaseVersion {
found: u32,
expected: u32,
},
#[display("Multiple heights found in the commit {heights:?}")]
MultipleHeightsInCommit {
heights: Vec<u64>,
},
#[display("Failed to advance the height")]
FailedToAdvanceHeight,
#[display(
"New and old heights are not linked: prev_height: {prev_height:#x}, new_height: {new_height:#x}"
)]
HeightsAreNotLinked {
prev_height: u64,
new_height: u64,
},
#[display(
"The new height is not found, but the old height is set: prev_height: {prev_height:#x}"
)]
NewHeightIsNotSet {
prev_height: u64,
},
#[display(
"The historical database doesn't have history for the requested height {requested_height:#x}"
)]
NoHistoryForRequestedHeight { requested_height: u64 },
#[display("Reached the end of the history")]
ReachedEndOfHistory,
#[cfg(feature = "backup")]
#[display("BackupEngine initialization error: {}", _0)]
BackupEngineInitError(anyhow::Error),
#[cfg(feature = "backup")]
#[display("Backup error: {}", _0)]
BackupError(anyhow::Error),
#[cfg(feature = "backup")]
#[display("Restore error: {}", _0)]
RestoreError(anyhow::Error),
#[display(
"During committing of the changes found conflicting \
modifications at column {column} for the key {key:?}"
)]
ConflictingChanges { column: u32, key: ReferenceBytesKey },
#[from]
Other(anyhow::Error),
}
#[cfg(feature = "test-helpers")]
impl PartialEq for Error {
fn eq(&self, other: &Self) -> bool {
self.to_string().eq(&other.to_string())
}
}
impl From<Error> for anyhow::Error {
fn from(error: Error) -> Self {
anyhow::Error::msg(error)
}
}
impl From<Error> for StorageError {
fn from(e: Error) -> Self {
StorageError::DatabaseError(Box::new(e))
}
}
impl From<Error> for ExecutorError {
fn from(e: Error) -> Self {
ExecutorError::StorageError(format!("{}", StorageError::from(e)))
}
}
#[cfg(test)]
fuel_core_trace::enable_tracing!();