Implement Display, Error for error::Error
This commit is contained in:
parent
1b7863dc36
commit
738ef99dd7
48
src/error.rs
48
src/error.rs
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user