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 = { version = "1.0.104", features = ["derive"] }
|
||||||
serde_json = "1.0.47"
|
serde_json = "1.0.47"
|
||||||
url = { version = "2.1.1", features = ["serde"] }
|
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
|
missing_docs
|
||||||
)]
|
)]
|
||||||
|
|
||||||
|
pub mod error;
|
||||||
pub mod r0;
|
pub mod r0;
|
||||||
pub mod unversioned;
|
pub mod unversioned;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user