miden_objects/decoded/
error.rs1use alloc::boxed::Box;
2use core::error::Error;
3
4#[cfg(test)]
5mod tests;
6
7#[derive(Debug, thiserror::Error)]
14#[error("{0}")]
15pub struct VerificationError(#[source] Box<dyn Error + Send + Sync>);
16
17impl VerificationError {
18 pub fn new(source: impl Error + Send + Sync + 'static) -> Self {
19 let source: Box<dyn Error + Send + Sync> = Box::new(source);
20 match source.downcast::<Self>() {
21 Ok(error) => *error,
22 Err(source) => Self(source),
23 }
24 }
25}
26
27macro_rules! impl_verification_error_from {
28 ($($ty:ty),* $(,)?) => {$(
29 impl From<$ty> for VerificationError {
30 fn from(error: $ty) -> Self {
31 Self::new(error)
32 }
33 }
34 )*};
35}
36
37impl_verification_error_from!(
38 core::num::TryFromIntError,
39 miden_protobuf::ConversionError,
40 miden_protocol::assembly::mast::MastForestError,
41 miden_protocol::block::SignedBlockError,
42 miden_protocol::crypto::merkle::MerkleError,
43 miden_protocol::crypto::merkle::mmr::MmrError,
44 miden_protocol::crypto::merkle::smt::SmtLeafError,
45 miden_protocol::crypto::merkle::smt::SmtProofError,
46 miden_protocol::errors::AccountError,
47 miden_protocol::errors::AccountIdError,
48 miden_protocol::errors::AccountPatchError,
49 miden_protocol::errors::AccountTreeError,
50 miden_protocol::errors::AssetError,
51 miden_protocol::errors::AssetVaultError,
52 miden_protocol::errors::BatchAccountUpdateError,
53 miden_protocol::errors::BlockAccountUpdateError,
54 miden_protocol::errors::BlockBodyError,
55 miden_protocol::errors::NoteError,
56 miden_protocol::errors::OutputNoteError,
57 miden_protocol::errors::PartialAssetVaultError,
58 miden_protocol::errors::PartialBlockchainError,
59 miden_protocol::errors::ProposedBatchError,
60 miden_protocol::errors::ProtocolConfigError,
61 miden_protocol::errors::ProvenBatchError,
62 miden_protocol::errors::ProvenTransactionError,
63 miden_protocol::errors::StorageMapError,
64 miden_protocol::errors::StorageSlotNameError,
65 miden_protocol::errors::TransactionHeaderError,
66 miden_protocol::errors::TransactionInputError,
67 miden_protocol::errors::TransactionOutputError,
68 miden_protocol::errors::ValidatorConfigError,
69 miden_protocol::utils::serde::DeserializationError,
70 super::account::AccountHeaderError,
71 super::account::AccountPatchError,
72 super::account::AccountVersionError,
73 super::account::PartialStorageError,
74 super::account::StorageMapEntryError,
75 super::account::StorageMapPatchError,
76 super::account::VaultPatchError,
77 super::asset::AssetIdError,
78 super::asset::AssetVaultEntryError,
79 super::blockchain::BlockHeaderError,
80 super::blockchain::PartialBlockchainError,
81 super::note::NoteMetadataError,
82 super::note_file::CommittedNoteError,
83 super::primitives::AdviceError,
84 super::primitives::PartialMmrError,
85 super::primitives::PartialSmtError,
86 super::transaction::ForeignAccountSlotNameError,
87 super::transaction::InputNoteError,
88 super::transaction::ProposedBatchError,
89 super::transaction::ProvenBatchError,
90 super::transaction::TransactionArgsError,
91 super::transaction::TransactionHeaderBuildError,
92 super::transaction::TransactionInputsError,
93);