telegraph_api_rs/
error.rs

1//! Errors that occurred while working with the library
2
3use reqwest;
4use serde::Deserialize;
5use serde_json;
6use std::{error, fmt, io};
7
8
9/// Enum of lib errors
10#[derive(Debug, Deserialize)]
11#[serde(untagged)]
12pub enum TelegraphError {
13    /// Telegrapth API error
14    ApiError(String),
15    /// Error occurred when sending the request
16    #[serde(skip)]
17    RequestError(reqwest::Error),
18    /// Error occurred when parsing data
19    #[serde(skip)]
20    ParseError(serde_json::Error),
21    /// Error occurred when working with files
22    #[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}