carbon_core/
error.rs

1//! Defines the `Error` enum and `CarbonResult` type used for error handling in
2//! the `carbon-core` framework.
3//!
4//! The `Error` enum captures various error types that can occur within the
5//! framework, providing detailed error messages and support for custom error
6//! handling. The `CarbonResult` type alias simplifies function signatures by
7//! unifying the return type for functions that may return an `Error`.
8//!
9//! # Overview
10//!
11//! - **`Error`**: An enum representing specific error cases, from missing data
12//!   in transactions to issues with data sources. Each variant provides a
13//!   descriptive error message.
14//! - **`CarbonResult`**: A type alias for `Result<T, Error>`, where `T` is the
15//!   successful return type.
16//!
17//! These errors are essential for handling various scenarios that may arise
18//! during data processing in the `carbon-core` pipeline, including missing
19//! update types, missing transaction components, and custom errors for more
20//! flexible error management.
21//!
22//! # Notes
23//!
24//! - Implementing `thiserror::Error` provides automatic derivation of error
25//!   display messages.
26//! - Each error variant corresponds to a unique error scenario within the
27//!   `carbon-core` framework.
28
29use {crate::datasource::UpdateType, thiserror::Error};
30
31#[derive(Error, Debug)]
32pub enum Error {
33    #[error("Missing update type in datasource")]
34    MissingUpdateTypeInDatasource(UpdateType),
35    #[error("Failed to receive updates({0})")]
36    FailedToReceiveUpdates(String),
37    #[error("Transaction missing fee payer")]
38    MissingFeePayer,
39    #[error("Missing inner instructions")]
40    MissingInnerInstructions,
41    #[error("Missing account in transaction")]
42    MissingAccountInTransaction,
43    #[error("Missing instruction data")]
44    MissingInstructionData,
45    #[error("Failed to consume datasource ({0})")]
46    FailedToConsumeDatasource(String),
47    #[error("Custom error: {0}")]
48    Custom(String),
49}
50
51/// A type alias for `Result` with the `Error` type as the error variant.
52///
53/// This alias simplifies function signatures in the `carbon-core` framework by
54/// unifying error handling under a common type. Any function that may result in
55/// an `Error` can return a `CarbonResult`, providing clear and consistent error
56/// reporting.
57///
58/// # Example
59///
60/// ```ignore
61/// use core::error::Error;
62/// use carbon_core::error::CarbonResult;
63///
64/// fn example_function(success: bool) -> CarbonResult<()> {
65///     if success {
66///         Ok(())
67///     } else {
68///        Err(<dyn Error>::MissingInstructionData)
69///     }
70/// }
71///
72/// match example_function(false) {
73///     Ok(_) => println!("Operation succeeded."),
74///     Err(e) => eprintln!("Error occurred: {}", e),
75/// }
76/// ```
77pub type CarbonResult<T> = Result<T, Error>;