feat: add MatrixError struct
This commit is contained in:
parent
1c2ab9e768
commit
dffe376aeb
@ -20,3 +20,4 @@ ruma-identifiers = "0.14.1"
|
||||
serde = { version = "1.0.104", features = ["derive"] }
|
||||
serde_json = "1.0.47"
|
||||
url = { version = "2.1.1", features = ["serde"] }
|
||||
http = "0.2.0"
|
||||
|
148
src/error.rs
Normal file
148
src/error.rs
Normal file
@ -0,0 +1,148 @@
|
||||
//! Errors that can be sent from the homeserver.
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// An enum for the error kind. Items may contain additional information.
|
||||
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
|
||||
#[serde(tag = "errcode")]
|
||||
pub enum ErrorKind {
|
||||
/// M_FORBIDDEN
|
||||
#[serde(rename = "M_FORBIDDEN")]
|
||||
Forbidden,
|
||||
/// M_UNKNOWN_TOKEN
|
||||
#[serde(rename = "M_UNKNOWN_TOKEN")]
|
||||
UnknownToken,
|
||||
/// M_MISSING_TOKEN
|
||||
#[serde(rename = "M_MISSING_TOKEN")]
|
||||
MissingToken,
|
||||
/// M_BAD_JSON
|
||||
#[serde(rename = "M_BAD_JSON")]
|
||||
BadJson,
|
||||
/// M_NOT_JSON
|
||||
#[serde(rename = "M_NOT_JSON")]
|
||||
NotJson,
|
||||
/// M_NOT_FOUND
|
||||
#[serde(rename = "M_NOT_FOUND")]
|
||||
NotFound,
|
||||
/// M_LIMIT_EXCEEDED
|
||||
#[serde(rename = "M_LIMIT_EXCEEDED")]
|
||||
LimitExceeded,
|
||||
/// M_UNKNOWN
|
||||
#[serde(rename = "M_UNKNOWN")]
|
||||
Unknown,
|
||||
/// M_UNRECOGNIZED
|
||||
#[serde(rename = "M_UNRECOGNIZED")]
|
||||
Unrecognized,
|
||||
/// M_UNAUTHORIZED
|
||||
#[serde(rename = "M_UNAUTHORIZED")]
|
||||
Unauthorized,
|
||||
/// M_USER_IN_USE
|
||||
#[serde(rename = "M_USER_IN_USE")]
|
||||
UserInUse,
|
||||
/// M_INVALID_USERNAME
|
||||
#[serde(rename = "M_INVALID_USERNAME")]
|
||||
InvalidUsername,
|
||||
/// M_ROOM_IN_USE
|
||||
#[serde(rename = "M_ROOM_IN_USE")]
|
||||
RoomInUse,
|
||||
/// M_INVALID_ROOM_STATE
|
||||
#[serde(rename = "M_INVALID_ROOM_STATE")]
|
||||
InvalidRoomState,
|
||||
/// M_THREEPID_IN_USE
|
||||
#[serde(rename = "M_THREEPID_IN_USE")]
|
||||
ThreepidInUse,
|
||||
/// M_THREEPID_NOT_FOUND
|
||||
#[serde(rename = "M_THREEPID_NOT_FOUND")]
|
||||
ThreepidNotFound,
|
||||
/// M_THREEPID_AUTH_FAILED
|
||||
#[serde(rename = "M_THREEPID_AUTH_FAILED")]
|
||||
ThreepidAuthFailed,
|
||||
/// M_THREEPID_DENIED
|
||||
#[serde(rename = "M_THREEPID_DENIED")]
|
||||
ThreepidDenied,
|
||||
/// M_SERVER_NOT_TRUSTED
|
||||
#[serde(rename = "M_SERVER_NOT_TRUSTED")]
|
||||
ServerNotTrusted,
|
||||
/// M_UNSUPPORTED_ROOM_VERSION
|
||||
#[serde(rename = "M_UNSUPPORTED_ROOM_VERSION")]
|
||||
UnsupportedRoomVersion,
|
||||
/// M_INCOMPATIBLE_ROOM_VERSION
|
||||
#[serde(rename = "M_INCOMPATIBLE_ROOM_VERSION")]
|
||||
IncompatibleRoomVersion,
|
||||
/// M_BAD_STATE
|
||||
#[serde(rename = "M_BAD_STATE")]
|
||||
BadState,
|
||||
/// M_GUEST_ACCESS_FORBIDDEN
|
||||
#[serde(rename = "M_GUEST_ACCESS_FORBIDDEN")]
|
||||
GuestAccessForbidden,
|
||||
/// M_CAPTCHA_NEEDED
|
||||
#[serde(rename = "M_CAPTCHA_NEEDED")]
|
||||
CaptchaNeeded,
|
||||
/// M_CAPTCHA_INVALID
|
||||
#[serde(rename = "M_CAPTCHA_INVALID")]
|
||||
CaptchaInvalid,
|
||||
/// M_MISSING_PARAM
|
||||
#[serde(rename = "M_MISSING_PARAM")]
|
||||
MissingParam,
|
||||
/// M_INVALID_PARAM
|
||||
#[serde(rename = "M_INVALID_PARAM")]
|
||||
InvalidParam,
|
||||
/// M_TOO_LARGE
|
||||
#[serde(rename = "M_TOO_LARGE")]
|
||||
TooLarge,
|
||||
/// M_EXCLUSIVE
|
||||
#[serde(rename = "M_EXCLUSIVE")]
|
||||
Exclusive,
|
||||
}
|
||||
|
||||
/// A Matrix Error without a status code
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct ErrorBody {
|
||||
/// A value which can be used to handle an error message
|
||||
#[serde(flatten)]
|
||||
pub kind: ErrorKind,
|
||||
/// A human-readable error message, usually a sentence explaining what went wrong.
|
||||
#[serde(rename = "error")]
|
||||
pub message: String,
|
||||
}
|
||||
|
||||
/// A Matrix Error
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Error {
|
||||
/// A value which can be used to handle an error message
|
||||
pub kind: ErrorKind,
|
||||
/// A human-readable error message, usually a sentence explaining what went wrong.
|
||||
pub message: String,
|
||||
/// The http status code
|
||||
pub status_code: http::StatusCode,
|
||||
}
|
||||
|
||||
impl From<Error> for ErrorBody {
|
||||
fn from(error: Error) -> Self {
|
||||
Self {
|
||||
kind: error.kind,
|
||||
message: error.message,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ErrorBody {
|
||||
/// Convert the ErrorBody into an Error by adding the http status code.
|
||||
pub fn into_error(self, status_code: http::StatusCode) -> Error {
|
||||
Error {
|
||||
kind: self.kind,
|
||||
message: self.message,
|
||||
status_code,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Error> for http::Response<Vec<u8>> {
|
||||
fn from(error: Error) -> http::Response<Vec<u8>> {
|
||||
http::Response::builder()
|
||||
.header(http::header::CONTENT_TYPE, "application/json")
|
||||
.status(error.status_code)
|
||||
.body(serde_json::to_vec(&ErrorBody::from(error)).unwrap())
|
||||
.unwrap()
|
||||
}
|
||||
}
|
@ -8,5 +8,6 @@
|
||||
missing_docs
|
||||
)]
|
||||
|
||||
pub mod error;
|
||||
pub mod r0;
|
||||
pub mod unversioned;
|
||||
|
Loading…
x
Reference in New Issue
Block a user