alchemy_api/cores/
error.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(untagged)]
6pub enum AlchemyError {
7 Nested(NestedError),
9 Flatten(FlattenError),
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct FlattenError {
16 message: String,
17 name: Option<String>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct NestedError {
23 error: FlattenError,
24}
25
26impl std::fmt::Display for AlchemyError {
27 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
28 let err = match self {
29 AlchemyError::Nested(err) => &err.error,
30 AlchemyError::Flatten(err) => err,
31 };
32
33 match &err.name {
34 Some(name) => write!(f, "{}: {}", name, err.message),
35 None => write!(f, "{}", err.message),
36 }
37 }
38}
39
40impl std::error::Error for AlchemyError {
41 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
42 None
43 }
44
45 fn cause(&self) -> Option<&dyn std::error::Error> {
46 self.source()
47 }
48}