use core::fmt::Display; #[derive(Debug, PartialEq, Eq)] pub enum TieredSmtProofError { EntriesEmpty, EmptyValueNotAllowed, MismatchedPrefixes(u64, u64), MultipleEntriesOutsideLastTier, NotATierPath(u8), PathTooLong, } impl Display for TieredSmtProofError { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { TieredSmtProofError::EntriesEmpty => { write!(f, "Missing entries for tiered sparse merkle tree proof") } TieredSmtProofError::EmptyValueNotAllowed => { write!( f, "The empty value [0, 0, 0, 0] is not allowed inside a tiered sparse merkle tree" ) } TieredSmtProofError::MismatchedPrefixes(first, second) => { write!(f, "Not all leaves have the same prefix. First {first} second {second}") } TieredSmtProofError::MultipleEntriesOutsideLastTier => { write!(f, "Multiple entries are only allowed for the last tier (depth 64)") } TieredSmtProofError::NotATierPath(got) => { write!( f, "Path length does not correspond to a tier. Got {got} Expected one of 16, 32, 48, 64" ) } TieredSmtProofError::PathTooLong => { write!( f, "Path longer than maximum depth of 64 for tiered sparse merkle tree proof" ) } } } } #[cfg(feature = "std")] impl std::error::Error for TieredSmtProofError {}