arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
miden-crypto/src/merkle/mmr/error.rs
src/merkle/mmr/error.rsRaw
 1use core::fmt::{Display, Formatter};
 2#[cfg(feature = "std")]
 3use std::error::Error;
 4
 5use crate::merkle::MerkleError;
 6
 7#[derive(Debug, PartialEq, Eq, Clone)]
 8pub enum MmrError {
 9    InvalidPosition(usize),
10    InvalidPeaks,
11    InvalidPeak,
12    PeakOutOfBounds(usize, usize),
13    InvalidUpdate,
14    UnknownPeak,
15    MerkleError(MerkleError),
16}
17
18impl Display for MmrError {
19    fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), core::fmt::Error> {
20        match self {
21            MmrError::InvalidPosition(pos) => write!(fmt, "Mmr does not contain position {pos}"),
22            MmrError::InvalidPeaks => write!(fmt, "Invalid peaks count"),
23            MmrError::InvalidPeak => {
24                write!(fmt, "Peak values does not match merkle path computed root")
25            },
26            MmrError::PeakOutOfBounds(peak_idx, peaks_len) => write!(
27                fmt,
28                "Requested peak index is {} but the number of peaks is {}",
29                peak_idx, peaks_len
30            ),
31            MmrError::InvalidUpdate => write!(fmt, "Invalid Mmr update"),
32            MmrError::UnknownPeak => {
33                write!(fmt, "Peak not in Mmr")
34            },
35            MmrError::MerkleError(err) => write!(fmt, "{}", err),
36        }
37    }
38}
39
40#[cfg(feature = "std")]
41impl Error for MmrError {}