Implement Display, Error for error::Error

This commit is contained in:
Jonas Platte 2020-04-20 15:20:41 +02:00
parent 1b7863dc36
commit 738ef99dd7
No known key found for this signature in database
GPG Key ID: 7D261D771D915378

View File

@ -1,99 +1,131 @@
//! Errors that can be sent from the homeserver. //! Errors that can be sent from the homeserver.
use std::fmt::{self, Display, Formatter};
use ruma_api::{error::ResponseDeserializationError, EndpointError}; use ruma_api::{error::ResponseDeserializationError, EndpointError};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use strum::{AsRefStr, Display, EnumString};
/// An enum for the error kind. Items may contain additional information. /// An enum for the error kind. Items may contain additional information.
#[derive(Debug, Clone, Copy, Serialize, Deserialize)] #[derive(Debug, Clone, Copy, Serialize, Deserialize, AsRefStr, Display, EnumString)]
#[serde(tag = "errcode")] #[serde(tag = "errcode")]
#[cfg_attr(test, derive(PartialEq))] #[cfg_attr(test, derive(PartialEq))]
pub enum ErrorKind { pub enum ErrorKind {
/// M_FORBIDDEN /// M_FORBIDDEN
#[serde(rename = "M_FORBIDDEN")] #[serde(rename = "M_FORBIDDEN")]
#[strum(to_string = "M_FORBIDDEN")]
Forbidden, Forbidden,
/// M_UNKNOWN_TOKEN /// M_UNKNOWN_TOKEN
#[serde(rename = "M_UNKNOWN_TOKEN")] #[serde(rename = "M_UNKNOWN_TOKEN")]
#[strum(to_string = "M_UNKNOWN_TOKEN")]
UnknownToken, UnknownToken,
/// M_MISSING_TOKEN /// M_MISSING_TOKEN
#[serde(rename = "M_MISSING_TOKEN")] #[serde(rename = "M_MISSING_TOKEN")]
#[strum(to_string = "M_MISSING_TOKEN")]
MissingToken, MissingToken,
/// M_BAD_JSON /// M_BAD_JSON
#[serde(rename = "M_BAD_JSON")] #[serde(rename = "M_BAD_JSON")]
#[strum(to_string = "M_BAD_JSON")]
BadJson, BadJson,
/// M_NOT_JSON /// M_NOT_JSON
#[serde(rename = "M_NOT_JSON")] #[serde(rename = "M_NOT_JSON")]
#[strum(to_string = "M_NOT_JSON")]
NotJson, NotJson,
/// M_NOT_FOUND /// M_NOT_FOUND
#[serde(rename = "M_NOT_FOUND")] #[serde(rename = "M_NOT_FOUND")]
#[strum(to_string = "M_NOT_FOUND")]
NotFound, NotFound,
/// M_LIMIT_EXCEEDED /// M_LIMIT_EXCEEDED
#[serde(rename = "M_LIMIT_EXCEEDED")] #[serde(rename = "M_LIMIT_EXCEEDED")]
#[strum(to_string = "M_LIMIT_EXCEEDED")]
LimitExceeded, LimitExceeded,
/// M_UNKNOWN /// M_UNKNOWN
#[serde(rename = "M_UNKNOWN")] #[serde(rename = "M_UNKNOWN")]
#[strum(to_string = "M_UNKNOWN")]
Unknown, Unknown,
/// M_UNRECOGNIZED /// M_UNRECOGNIZED
#[serde(rename = "M_UNRECOGNIZED")] #[serde(rename = "M_UNRECOGNIZED")]
#[strum(to_string = "M_UNRECOGNIZED")]
Unrecognized, Unrecognized,
/// M_UNAUTHORIZED /// M_UNAUTHORIZED
#[serde(rename = "M_UNAUTHORIZED")] #[serde(rename = "M_UNAUTHORIZED")]
#[strum(to_string = "M_UNAUTHORIZED")]
Unauthorized, Unauthorized,
/// M_USER_IN_USE /// M_USER_IN_USE
#[serde(rename = "M_USER_IN_USE")] #[serde(rename = "M_USER_IN_USE")]
#[strum(to_string = "M_USER_IN_USE")]
UserInUse, UserInUse,
/// M_INVALID_USERNAME /// M_INVALID_USERNAME
#[serde(rename = "M_INVALID_USERNAME")] #[serde(rename = "M_INVALID_USERNAME")]
#[strum(to_string = "M_INVALID_USERNAME")]
InvalidUsername, InvalidUsername,
/// M_ROOM_IN_USE /// M_ROOM_IN_USE
#[serde(rename = "M_ROOM_IN_USE")] #[serde(rename = "M_ROOM_IN_USE")]
#[strum(to_string = "M_ROOM_IN_USE")]
RoomInUse, RoomInUse,
/// M_INVALID_ROOM_STATE /// M_INVALID_ROOM_STATE
#[serde(rename = "M_INVALID_ROOM_STATE")] #[serde(rename = "M_INVALID_ROOM_STATE")]
#[strum(to_string = "M_INVALID_ROOM_STATE")]
InvalidRoomState, InvalidRoomState,
/// M_THREEPID_IN_USE /// M_THREEPID_IN_USE
#[serde(rename = "M_THREEPID_IN_USE")] #[serde(rename = "M_THREEPID_IN_USE")]
#[strum(to_string = "M_THREEPID_IN_USE")]
ThreepidInUse, ThreepidInUse,
/// M_THREEPID_NOT_FOUND /// M_THREEPID_NOT_FOUND
#[serde(rename = "M_THREEPID_NOT_FOUND")] #[serde(rename = "M_THREEPID_NOT_FOUND")]
#[strum(to_string = "M_THREEPID_NOT_FOUND")]
ThreepidNotFound, ThreepidNotFound,
/// M_THREEPID_AUTH_FAILED /// M_THREEPID_AUTH_FAILED
#[serde(rename = "M_THREEPID_AUTH_FAILED")] #[serde(rename = "M_THREEPID_AUTH_FAILED")]
#[strum(to_string = "M_THREEPID_AUTH_FAILED")]
ThreepidAuthFailed, ThreepidAuthFailed,
/// M_THREEPID_DENIED /// M_THREEPID_DENIED
#[serde(rename = "M_THREEPID_DENIED")] #[serde(rename = "M_THREEPID_DENIED")]
#[strum(to_string = "M_THREEPID_DENIED")]
ThreepidDenied, ThreepidDenied,
/// M_SERVER_NOT_TRUSTED /// M_SERVER_NOT_TRUSTED
#[serde(rename = "M_SERVER_NOT_TRUSTED")] #[serde(rename = "M_SERVER_NOT_TRUSTED")]
#[strum(to_string = "M_SERVER_NOT_TRUSTED")]
ServerNotTrusted, ServerNotTrusted,
/// M_UNSUPPORTED_ROOM_VERSION /// M_UNSUPPORTED_ROOM_VERSION
#[serde(rename = "M_UNSUPPORTED_ROOM_VERSION")] #[serde(rename = "M_UNSUPPORTED_ROOM_VERSION")]
#[strum(to_string = "M_UNSUPPORTED_ROOM_VERSION")]
UnsupportedRoomVersion, UnsupportedRoomVersion,
/// M_INCOMPATIBLE_ROOM_VERSION /// M_INCOMPATIBLE_ROOM_VERSION
#[serde(rename = "M_INCOMPATIBLE_ROOM_VERSION")] #[serde(rename = "M_INCOMPATIBLE_ROOM_VERSION")]
#[strum(to_string = "M_INCOMPATIBLE_ROOM_VERSION")]
IncompatibleRoomVersion, IncompatibleRoomVersion,
/// M_BAD_STATE /// M_BAD_STATE
#[serde(rename = "M_BAD_STATE")] #[serde(rename = "M_BAD_STATE")]
#[strum(to_string = "M_BAD_STATE")]
BadState, BadState,
/// M_GUEST_ACCESS_FORBIDDEN /// M_GUEST_ACCESS_FORBIDDEN
#[serde(rename = "M_GUEST_ACCESS_FORBIDDEN")] #[serde(rename = "M_GUEST_ACCESS_FORBIDDEN")]
#[strum(to_string = "M_GUEST_ACCESS_FORBIDDEN")]
GuestAccessForbidden, GuestAccessForbidden,
/// M_CAPTCHA_NEEDED /// M_CAPTCHA_NEEDED
#[serde(rename = "M_CAPTCHA_NEEDED")] #[serde(rename = "M_CAPTCHA_NEEDED")]
#[strum(to_string = "M_CAPTCHA_NEEDED")]
CaptchaNeeded, CaptchaNeeded,
/// M_CAPTCHA_INVALID /// M_CAPTCHA_INVALID
#[serde(rename = "M_CAPTCHA_INVALID")] #[serde(rename = "M_CAPTCHA_INVALID")]
#[strum(to_string = "M_CAPTCHA_INVALID")]
CaptchaInvalid, CaptchaInvalid,
/// M_MISSING_PARAM /// M_MISSING_PARAM
#[serde(rename = "M_MISSING_PARAM")] #[serde(rename = "M_MISSING_PARAM")]
#[strum(to_string = "M_MISSING_PARAM")]
MissingParam, MissingParam,
/// M_INVALID_PARAM /// M_INVALID_PARAM
#[serde(rename = "M_INVALID_PARAM")] #[serde(rename = "M_INVALID_PARAM")]
#[strum(to_string = "M_INVALID_PARAM")]
InvalidParam, InvalidParam,
/// M_TOO_LARGE /// M_TOO_LARGE
#[serde(rename = "M_TOO_LARGE")] #[serde(rename = "M_TOO_LARGE")]
#[strum(to_string = "M_TOO_LARGE")]
TooLarge, TooLarge,
/// M_EXCLUSIVE /// M_EXCLUSIVE
#[serde(rename = "M_EXCLUSIVE")] #[serde(rename = "M_EXCLUSIVE")]
#[strum(to_string = "M_EXCLUSIVE")]
Exclusive, Exclusive,
} }
@ -131,6 +163,20 @@ impl EndpointError for Error {
} }
} }
impl Display for Error {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(
f,
"[{} / {}] {}",
self.status_code.as_u16(),
self.kind,
self.message
)
}
}
impl std::error::Error for Error {}
impl From<Error> for ErrorBody { impl From<Error> for ErrorBody {
fn from(error: Error) -> Self { fn from(error: Error) -> Self {
Self { Self {