miden_node_proto/
errors.rs1use 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}