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