miden_node_proto/
errors.rs

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