light_indexed_merkle_tree/
errors.rs1use 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}