1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
use std::fmt; use reqwest::StatusCode; use url::ParseError; #[derive(Debug)] pub enum Error { Ratelimit { retry_after: u32 }, Reqwest(reqwest::Error), Url(ParseError), } impl Error { pub fn is_ratelimit(&self) -> bool { match self { Error::Ratelimit { .. } => true, _ => false, } } pub fn status(&self) -> Option<StatusCode> { match self { Error::Ratelimit { .. } => Some(StatusCode::TOO_MANY_REQUESTS), Error::Reqwest(e) => e.status(), Error::Url(_) => None, } } } impl std::error::Error for Error {} impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Error::Ratelimit { retry_after } => { write!(f, "Ratelimit reached, retry after: {}", retry_after) } Error::Reqwest(e) => e.fmt(f), Error::Url(e) => e.fmt(f), } } } pub fn ratelimit(retry_after: u32) -> Error { Error::Ratelimit { retry_after } } pub fn from(e: reqwest::Error) -> Error { Error::Reqwest(e) }