#[derive(Fail, Debug)]
pub enum Error {
#[fail(display = "{}", _0)]
Io(#[fail(cause)] std::io::Error),
#[cfg(feature = "jwt")]
#[fail(display = "The key format is invalid or unknown")]
InvalidKeyFormat,
#[fail(display = "{}", _0)]
Base64Decode(#[fail(cause)] base64::DecodeError),
#[fail(display = "{}", _0)]
Http(#[fail(cause)] http::Error),
#[fail(display = "HTTP error status: {}", _0)]
HttpStatus(http::StatusCode),
#[fail(display = "{}", _0)]
Json(#[fail(cause)] serde_json::Error),
#[fail(display = "Auth error {}", _0)]
AuthError(#[fail(cause)] AuthError),
#[cfg(feature = "jwt")]
#[fail(display = "RSA key is invalid")]
InvalidRsaKey,
}
impl From<base64::DecodeError> for Error {
fn from(e: base64::DecodeError) -> Self {
Error::Base64Decode(e)
}
}
impl From<http::Error> for Error {
fn from(e: http::Error) -> Self {
Error::Http(e)
}
}
impl From<serde_json::Error> for Error {
fn from(e: serde_json::Error) -> Self {
Error::Json(e)
}
}
#[derive(Deserialize, Debug, Fail)]
#[fail(display = "Auth error {:?}", error_description)]
pub struct AuthError {
error: Option<String>,
error_description: Option<String>,
}