1use std::borrow::Cow;
2
3pub type Result<T> = std::result::Result<T, Error>;
4
5#[derive(Debug)]
6pub enum Error {
7 InvalidInput(Cow<'static, str>),
8 Http(reqwest::Error),
9 Json(serde_json::Error),
10 Api {
11 provider: crate::types::Provider,
12 status: u16,
13 body: String,
14 },
15}
16
17impl std::fmt::Display for Error {
18 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
19 match self {
20 Error::InvalidInput(msg) => write!(f, "invalid input: {msg}"),
21 Error::Http(e) => write!(f, "http error: {e}"),
22 Error::Json(e) => write!(f, "json error: {e}"),
23 Error::Api {
24 provider,
25 status,
26 body,
27 } => write!(f, "{provider:?} api error ({status}): {body}"),
28 }
29 }
30}
31
32impl std::error::Error for Error {}
33
34impl From<reqwest::Error> for Error {
35 fn from(value: reqwest::Error) -> Self {
36 Self::Http(value)
37 }
38}
39
40impl From<serde_json::Error> for Error {
41 fn from(value: serde_json::Error) -> Self {
42 Self::Json(value)
43 }
44}