drive_abci/error/
mod.rs

1use crate::abci::AbciError;
2use crate::error::execution::ExecutionError;
3use crate::error::serialization::SerializationError;
4use crate::logging;
5use dpp::bls_signatures::BlsError;
6use dpp::dashcore_rpc::Error as CoreRpcError;
7use dpp::data_contract::errors::DataContractError;
8use dpp::platform_value::Error as ValueError;
9use dpp::version::PlatformVersionError;
10use drive::dpp::ProtocolError;
11use drive::error::Error as DriveError;
12use tenderdash_abci::proto::abci::ResponseException;
13
14/// Execution errors module
15pub mod execution;
16/// Query errors module
17pub mod query;
18/// Serialization errors module
19pub mod serialization;
20
21// @append_only
22/// Errors
23#[derive(Debug, thiserror::Error)]
24pub enum Error {
25    /// ABCI Server Error
26    #[error("abci: {0}")]
27    Abci(#[from] AbciError),
28    /// Drive Error
29    #[error("storage: {0}")]
30    Drive(#[from] DriveError),
31    /// Protocol Error
32    #[error("protocol: {0}")]
33    Protocol(#[from] ProtocolError),
34    /// Execution Error
35    #[error("execution: {0}")]
36    Execution(#[from] ExecutionError),
37    /// Core RPC Error
38    #[error("core rpc error: {0}")]
39    CoreRpc(#[from] CoreRpcError),
40    /// BLS Error
41    #[error("BLS error: {0}")]
42    BLSError(#[from] BlsError),
43    /// Serialization Error
44    #[error("serialization: {0}")]
45    Serialization(#[from] SerializationError),
46    /// Configuration Error
47    #[error("configuration: {0}")]
48    Configuration(#[from] envy::Error),
49    /// Logging error
50    #[error("logging: {0}")]
51    Logging(#[from] logging::Error),
52    /// Error from metrics subsystem
53    #[error("metrics: {0}")]
54    Metrics(#[from] crate::metrics::Error),
55}
56
57impl From<PlatformVersionError> for Error {
58    fn from(value: PlatformVersionError) -> Self {
59        let platform_error: ProtocolError = value.into();
60        platform_error.into()
61    }
62}
63
64impl From<DataContractError> for Error {
65    fn from(value: DataContractError) -> Self {
66        Self::Protocol(ProtocolError::DataContractError(value))
67    }
68}
69
70impl From<ValueError> for Error {
71    fn from(value: ValueError) -> Self {
72        let platform_error: ProtocolError = value.into();
73        platform_error.into()
74    }
75}
76
77impl From<drive::grovedb::Error> for Error {
78    fn from(value: drive::grovedb::Error) -> Self {
79        let drive_error: DriveError = value.into();
80        drive_error.into()
81    }
82}
83
84impl From<Error> for ResponseException {
85    fn from(value: Error) -> Self {
86        Self {
87            error: value.to_string(),
88        }
89    }
90}