telegraph_api_rs/
error.rs1use reqwest;
4use serde::Deserialize;
5use serde_json;
6use std::{error, fmt, io};
7
8
9#[derive(Debug, Deserialize)]
11#[serde(untagged)]
12pub enum TelegraphError {
13 ApiError(String),
15 #[serde(skip)]
17 RequestError(reqwest::Error),
18 #[serde(skip)]
20 ParseError(serde_json::Error),
21 #[serde(skip)]
23 IoError(io::Error)
24}
25
26
27impl fmt::Display for TelegraphError {
28 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29 match self {
30 TelegraphError::ApiError(error) => write!(f, "Api error: {}", error),
31 TelegraphError::RequestError(error) => write!(f, "Request error: {}", error),
32 TelegraphError::ParseError(error) => write!(f, "Parse error: {}", error),
33 TelegraphError::IoError(error) => write!(f, "IO error: {}", error),
34 }
35 }
36}
37
38
39impl error::Error for TelegraphError {
40 fn source(&self) -> Option<&(dyn error::Error + 'static)> {
41 match self {
42 TelegraphError::RequestError(error) => Some(error),
43 TelegraphError::ApiError(_) => None,
44 TelegraphError::ParseError(error) => Some(error),
45 TelegraphError::IoError(error) => Some(error),
46 }
47 }
48}
49
50
51impl From<serde_json::Error> for TelegraphError {
52 fn from(error: serde_json::Error) -> Self {
53 TelegraphError::ParseError(error)
54 }
55}
56
57impl From<reqwest::Error> for TelegraphError {
58 fn from(error: reqwest::Error) -> Self {
59 TelegraphError::RequestError(error)
60 }
61}
62
63impl From<io::Error> for TelegraphError {
64 fn from(error: io::Error) -> Self {
65 TelegraphError::IoError(error)
66 }
67}