miden_node_proto/
errors.rs

1use std::{any::type_name, num::TryFromIntError};
2
3use miden_objects::crypto::merkle::{SmtLeafError, SmtProofError};
4use thiserror::Error;
5
6#[derive(Debug, Error)]
7pub enum ConversionError {
8    #[error("hex error")]
9    HexError(#[from] hex::FromHexError),
10    #[error("note error")]
11    NoteError(#[from] miden_objects::NoteError),
12    #[error("SMT leaf error")]
13    SmtLeafError(#[from] SmtLeafError),
14    #[error("SMT proof error")]
15    SmtProofError(#[from] SmtProofError),
16    #[error("integer conversion error: {0}")]
17    TryFromIntError(#[from] TryFromIntError),
18    #[error("too much data, expected {expected}, got {got}")]
19    TooMuchData { expected: usize, got: usize },
20    #[error("not enough data, expected {expected}, got {got}")]
21    InsufficientData { expected: usize, got: usize },
22    #[error("value is not in the range 0..MODULUS")]
23    NotAValidFelt,
24    #[error("field `{entity}::{field_name}` is missing")]
25    MissingFieldInProtobufRepresentation {
26        entity: &'static str,
27        field_name: &'static str,
28    },
29    #[error("MMR error")]
30    MmrError(#[from] miden_objects::crypto::merkle::MmrError),
31}
32
33pub trait MissingFieldHelper {
34    fn missing_field(field_name: &'static str) -> ConversionError;
35}
36
37impl<T: prost::Message> MissingFieldHelper for T {
38    fn missing_field(field_name: &'static str) -> ConversionError {
39        ConversionError::MissingFieldInProtobufRepresentation {
40            entity: type_name::<T>(),
41            field_name,
42        }
43    }
44}