light_indexed_merkle_tree/
errors.rs

1use light_bounded_vec::BoundedVecError;
2use light_concurrent_merkle_tree::{
3    errors::ConcurrentMerkleTreeError, light_hasher::errors::HasherError,
4};
5use thiserror::Error;
6
7#[derive(Debug, Error, PartialEq)]
8pub enum IndexedMerkleTreeError {
9    #[error("Integer overflow")]
10    IntegerOverflow,
11    #[error("Invalid index, it exceeds the number of elements.")]
12    IndexHigherThanMax,
13    #[error("Could not find the low element.")]
14    LowElementNotFound,
15    #[error("Low element is greater or equal to the provided new element.")]
16    LowElementGreaterOrEqualToNewElement,
17    #[error("The provided new element is greater or equal to the next element.")]
18    NewElementGreaterOrEqualToNextElement,
19    #[error("The element already exists, but was expected to be absent.")]
20    ElementAlreadyExists,
21    #[error("The element does not exist, but was expected to be present.")]
22    ElementDoesNotExist,
23    #[error("Invalid changelog buffer size, expected {0}, got {1}")]
24    ChangelogBufferSize(usize, usize),
25    #[error("Hasher error: {0}")]
26    Hasher(#[from] HasherError),
27    #[error("Concurrent Merkle tree error: {0}")]
28    ConcurrentMerkleTree(#[from] ConcurrentMerkleTreeError),
29    #[error("Bounded vector error: {0}")]
30    BoundedVec(#[from] BoundedVecError),
31    #[error("Indexed array is full, cannot append more elements")]
32    ArrayFull,
33}
34
35impl From<IndexedMerkleTreeError> for u32 {
36    fn from(e: IndexedMerkleTreeError) -> u32 {
37        match e {
38            IndexedMerkleTreeError::IntegerOverflow => 11001,
39            IndexedMerkleTreeError::IndexHigherThanMax => 11002,
40            IndexedMerkleTreeError::LowElementNotFound => 11003,
41            IndexedMerkleTreeError::LowElementGreaterOrEqualToNewElement => 11004,
42            IndexedMerkleTreeError::NewElementGreaterOrEqualToNextElement => 11005,
43            IndexedMerkleTreeError::ElementAlreadyExists => 11006,
44            IndexedMerkleTreeError::ElementDoesNotExist => 11007,
45            IndexedMerkleTreeError::ChangelogBufferSize(_, _) => 11008,
46            IndexedMerkleTreeError::ArrayFull => 11009,
47            IndexedMerkleTreeError::Hasher(e) => e.into(),
48            IndexedMerkleTreeError::ConcurrentMerkleTree(e) => e.into(),
49            IndexedMerkleTreeError::BoundedVec(e) => e.into(),
50        }
51    }
52}
53
54#[cfg(feature = "pinocchio")]
55impl From<IndexedMerkleTreeError> for pinocchio::program_error::ProgramError {
56    fn from(e: IndexedMerkleTreeError) -> Self {
57        pinocchio::program_error::ProgramError::Custom(e.into())
58    }
59}
60#[cfg(feature = "solana")]
61impl From<IndexedMerkleTreeError> for solana_program_error::ProgramError {
62    fn from(e: IndexedMerkleTreeError) -> Self {
63        solana_program_error::ProgramError::Custom(e.into())
64    }
65}