Skip to main content

rain_metadata/error/
mod.rs

1use std::{string::FromUtf8Error, str::Utf8Error};
2
3use rain_metaboard_subgraph::metaboard_client::MetaboardSubgraphClientError;
4
5use crate::meta::KnownMagic;
6
7/// Covers all errors variants of Rain Metadat lib functionalities
8#[derive(Debug)]
9pub enum Error {
10    CorruptMeta,
11    InvalidHash,
12    UnknownMeta,
13    UnknownMagic,
14    NoRecordFound,
15    UnsupportedMeta,
16    BiggerThan32Bytes,
17    UnsupportedNetwork,
18    InflateError(String),
19    InvalidInput(String),
20    InvalidUrl(String),
21    Utf8Error(Utf8Error),
22    FromUtf8Error(FromUtf8Error),
23    ReqwestError(reqwest::Error),
24    SerdeCborError(serde_cbor::Error),
25    SerdeJsonError(serde_json::Error),
26    AbiCoderError(alloy::sol_types::Error),
27    ValidationErrors(validator::ValidationErrors),
28    DecodeHexStringError(alloy::primitives::hex::FromHexError),
29    InvalidMetaMagic(KnownMagic, KnownMagic),
30    MetaboardSubgraphClientError(MetaboardSubgraphClientError),
31}
32
33impl std::fmt::Display for Error {
34    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35        match self {
36            Error::CorruptMeta => f.write_str("corrupt meta"),
37            Error::UnknownMeta => f.write_str("unknown meta"),
38            Error::UnknownMagic => f.write_str("unknown magic"),
39            Error::UnsupportedMeta => f.write_str("unsupported meta"),
40            Error::InvalidHash => f.write_str("invalid keccak256 hash"),
41            Error::NoRecordFound => f.write_str("found no matching record"),
42            Error::UnsupportedNetwork => {
43                f.write_str("no rain subgraph is deployed for this network")
44            }
45            Error::BiggerThan32Bytes => {
46                f.write_str("unexpected input size, must be 32 bytes or less")
47            }
48            Error::InvalidInput(v) => write!(f, "invalid input: {}", v),
49            Error::InvalidUrl(v) => write!(f, "invalid URL: {}", v),
50            Error::ReqwestError(v) => write!(f, "{}", v),
51            Error::InflateError(v) => write!(f, "{}", v),
52            Error::Utf8Error(v) => write!(f, "{}", v),
53            Error::AbiCoderError(v) => write!(f, "{}", v),
54            Error::SerdeCborError(v) => write!(f, "{}", v),
55            Error::SerdeJsonError(v) => write!(f, "{}", v),
56            Error::FromUtf8Error(v) => write!(f, "{}", v),
57            Error::DecodeHexStringError(v) => write!(f, "{}", v),
58            Error::ValidationErrors(v) => write!(f, "{}", v),
59            Error::InvalidMetaMagic(expected, actual) => {
60                write!(
61                    f,
62                    "invalid meta magic: expected {:?}, got {:?}",
63                    expected, actual
64                )
65            }
66            Error::MetaboardSubgraphClientError(v) => write!(f, "{}", v),
67        }
68    }
69}
70
71impl std::error::Error for Error {}
72
73impl From<serde_json::Error> for Error {
74    fn from(value: serde_json::Error) -> Self {
75        Error::SerdeJsonError(value)
76    }
77}
78
79impl From<serde_cbor::Error> for Error {
80    fn from(value: serde_cbor::Error) -> Self {
81        Error::SerdeCborError(value)
82    }
83}
84
85impl From<FromUtf8Error> for Error {
86    fn from(value: FromUtf8Error) -> Self {
87        Error::FromUtf8Error(value)
88    }
89}
90
91impl From<Utf8Error> for Error {
92    fn from(value: Utf8Error) -> Self {
93        Error::Utf8Error(value)
94    }
95}
96
97impl From<validator::ValidationErrors> for Error {
98    fn from(value: validator::ValidationErrors) -> Self {
99        Error::ValidationErrors(value)
100    }
101}
102
103impl From<alloy::sol_types::Error> for Error {
104    fn from(value: alloy::sol_types::Error) -> Self {
105        Error::AbiCoderError(value)
106    }
107}