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 {}