miden_client/rpc/
errors.rs

1use alloc::string::{String, ToString};
2
3use miden_objects::{account::AccountId, note::NoteId, utils::DeserializationError, NoteError};
4use thiserror::Error;
5
6// RPC ERROR
7// ================================================================================================
8
9#[derive(Debug, Error)]
10pub enum RpcError {
11    #[error("rpc api response contained an update for a private account: {0}")]
12    AccountUpdateForPrivateAccountReceived(AccountId),
13    #[error("failed to connect to the api server: {0}")]
14    ConnectionError(String),
15    #[error("failed to deserialize rpc data: {0}")]
16    DeserializationError(String),
17    #[error("rpc api response missing an expected field: {0}")]
18    ExpectedDataMissing(String),
19    #[error("rpc api response is invalid: {0}")]
20    InvalidResponse(String),
21    #[error("note with id {0} was not found")]
22    NoteNotFound(NoteId),
23    #[error("rpc request failed for {0}: {1}")]
24    RequestError(String, String),
25}
26
27impl From<DeserializationError> for RpcError {
28    fn from(err: DeserializationError) -> Self {
29        Self::DeserializationError(err.to_string())
30    }
31}
32
33impl From<NoteError> for RpcError {
34    fn from(err: NoteError) -> Self {
35        Self::DeserializationError(err.to_string())
36    }
37}
38
39impl From<RpcConversionError> for RpcError {
40    fn from(err: RpcConversionError) -> Self {
41        Self::DeserializationError(err.to_string())
42    }
43}
44
45// RPC CONVERSION ERROR
46// ================================================================================================
47
48#[derive(Debug, Error)]
49pub enum RpcConversionError {
50    #[error("value is not in the range 0..modulus")]
51    NotAValidFelt,
52    #[error("invalid note type value")]
53    NoteTypeError(#[from] NoteError),
54    #[error("field `{field_name}` expected to be present in protobuf representation of {entity}")]
55    MissingFieldInProtobufRepresentation {
56        entity: &'static str,
57        field_name: &'static str,
58    },
59}