1use std::{error, fmt};
2
3use hyper::{http, StatusCode};
4
5#[derive(Debug)]
6pub enum FirebaseClientError {
7 InvalidUriError(http::uri::InvalidUri),
8 SerializeNotificationError(serde_json::Error),
9 BuildRequestError(hyper::http::Error),
10 HttpRequestError {
11 status_code: StatusCode,
12 body: String,
13 },
14 ClientError(hyper::Error),
15 ReadBodyError(hyper::Error),
16}
17
18impl From<http::uri::InvalidUri> for FirebaseClientError {
19 fn from(err: http::uri::InvalidUri) -> Self {
20 FirebaseClientError::InvalidUriError(err)
21 }
22}
23
24impl From<hyper::http::Error> for FirebaseClientError {
25 fn from(err: hyper::http::Error) -> Self {
26 FirebaseClientError::BuildRequestError(err)
27 }
28}
29
30impl From<hyper::Error> for FirebaseClientError {
31 fn from(err: hyper::Error) -> Self {
32 FirebaseClientError::ClientError(err)
33 }
34}
35
36impl From<serde_json::Error> for FirebaseClientError {
37 fn from(err: serde_json::Error) -> Self {
38 FirebaseClientError::SerializeNotificationError(err)
39 }
40}
41
42impl fmt::Display for FirebaseClientError {
43 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44 match self {
45 FirebaseClientError::InvalidUriError(i) => write!(f, "InvalidUriError: {}", i),
46 FirebaseClientError::SerializeNotificationError(err) => {
47 write!(f, "SerializeNotificationError: {}", err)
48 }
49 FirebaseClientError::BuildRequestError(err) => write!(f, "BuildRequestError: {}", err),
50 FirebaseClientError::HttpRequestError { status_code, body } => {
51 write!(f, "HttpRequestError status:{} body:{}", status_code, body)
52 }
53 FirebaseClientError::ClientError(err) => write!(f, "ClientError: {}", err),
54 FirebaseClientError::ReadBodyError(err) => write!(f, "ReadBodyError: {}", err),
55 }
56 }
57}
58
59impl error::Error for FirebaseClientError {}