diff --git a/src/core/error/mod.rs b/src/core/error/mod.rs index b5721dee..5520e865 100644 --- a/src/core/error/mod.rs +++ b/src/core/error/mod.rs @@ -16,86 +16,84 @@ pub enum Error { Panic(&'static str, Box), // std - #[error("{0}")] + #[error(transparent)] Fmt(#[from] fmt::Error), + #[error(transparent)] + FromUtf8(#[from] std::string::FromUtf8Error), #[error("I/O error: {0}")] Io(#[from] std::io::Error), - #[error("{0}")] - Utf8Error(#[from] std::str::Utf8Error), - #[error("{0}")] - FromUtf8Error(#[from] std::string::FromUtf8Error), - #[error("{0}")] - TryFromSliceError(#[from] std::array::TryFromSliceError), - #[error("{0}")] - TryFromIntError(#[from] std::num::TryFromIntError), - #[error("{0}")] - ParseIntError(#[from] std::num::ParseIntError), - #[error("{0}")] - ParseFloatError(#[from] std::num::ParseFloatError), + #[error(transparent)] + ParseFloat(#[from] std::num::ParseFloatError), + #[error(transparent)] + ParseInt(#[from] std::num::ParseIntError), + #[error(transparent)] + TryFromInt(#[from] std::num::TryFromIntError), + #[error(transparent)] + TryFromSlice(#[from] std::array::TryFromSliceError), + #[error(transparent)] + Utf8(#[from] std::str::Utf8Error), // third-party + #[error(transparent)] + CargoToml(#[from] cargo_toml::Error), + #[error(transparent)] + Clap(#[from] clap::error::Error), + #[error(transparent)] + Extension(#[from] axum::extract::rejection::ExtensionRejection), + #[error(transparent)] + Figment(#[from] figment::error::Error), + #[error(transparent)] + Http(#[from] http::Error), + #[error(transparent)] + HttpHeader(#[from] http::header::InvalidHeaderValue), + #[error("Image error: {0}")] + Image(#[from] image::error::ImageError), #[error("Join error: {0}")] JoinError(#[from] tokio::task::JoinError), + #[error(transparent)] + Path(#[from] axum::extract::rejection::PathRejection), #[error("Regex error: {0}")] Regex(#[from] regex::Error), + #[error("Request error: {0}")] + Reqwest(#[from] reqwest::Error), + #[error(transparent)] + TomlDe(#[from] toml::de::Error), + #[error(transparent)] + TomlSer(#[from] toml::ser::Error), #[error("Tracing filter error: {0}")] TracingFilter(#[from] tracing_subscriber::filter::ParseError), #[error("Tracing reload error: {0}")] TracingReload(#[from] tracing_subscriber::reload::Error), - #[error("Image error: {0}")] - Image(#[from] image::error::ImageError), - #[error("Request error: {0}")] - Reqwest(#[from] reqwest::Error), - #[error("{0}")] - Extension(#[from] axum::extract::rejection::ExtensionRejection), - #[error("{0}")] - Path(#[from] axum::extract::rejection::PathRejection), - #[error("{0}")] - Http(#[from] http::Error), - #[error("{0}")] - HttpHeader(#[from] http::header::InvalidHeaderValue), - #[error("{0}")] - CargoToml(#[from] cargo_toml::Error), - #[error("{0}")] - FigmentError(#[from] figment::error::Error), - #[error("{0}")] - TomlSerError(#[from] toml::ser::Error), - #[error("{0}")] - TomlDeError(#[from] toml::de::Error), - #[error("{0}")] - Clap(#[from] clap::error::Error), - // ruma - #[error("{0}")] - IntoHttpError(#[from] ruma::api::error::IntoHttpError), - #[error("{0}")] - RumaError(#[from] ruma::api::client::error::Error), - #[error("uiaa")] - Uiaa(ruma::api::client::uiaa::UiaaInfo), - #[error("{0}")] - Mxid(#[from] ruma::IdParseError), - #[error("{0}: {1}")] - BadRequest(ruma::api::client::error::ErrorKind, &'static str), //TODO: remove - #[error("{0}: {1}")] - Request(ruma::api::client::error::ErrorKind, Cow<'static, str>, http::StatusCode), - #[error("from {0}: {1}")] - Redaction(ruma::OwnedServerName, ruma::canonical_json::RedactionError), - #[error("Remote server {0} responded with: {1}")] - Federation(ruma::OwnedServerName, ruma::api::client::error::Error), - #[error("{0} in {1}")] - InconsistentRoomState(&'static str, ruma::OwnedRoomId), - - // conduwuit + // ruma/conduwuit #[error("Arithmetic operation failed: {0}")] Arithmetic(Cow<'static, str>), + #[error("{0}: {1}")] + BadRequest(ruma::api::client::error::ErrorKind, &'static str), //TODO: remove #[error("{0}")] BadServerResponse(Cow<'static, str>), #[error("There was a problem with the '{0}' directive in your configuration: {1}")] Config(&'static str, Cow<'static, str>), #[error("{0}")] - Database(Cow<'static, str>), - #[error("{0}")] Conflict(&'static str), // This is only needed for when a room alias already exists + #[error("{0}")] + Database(Cow<'static, str>), + #[error("Remote server {0} responded with: {1}")] + Federation(ruma::OwnedServerName, ruma::api::client::error::Error), + #[error("{0} in {1}")] + InconsistentRoomState(&'static str, ruma::OwnedRoomId), + #[error(transparent)] + IntoHttp(#[from] ruma::api::error::IntoHttpError), + #[error(transparent)] + Mxid(#[from] ruma::IdParseError), + #[error("from {0}: {1}")] + Redaction(ruma::OwnedServerName, ruma::canonical_json::RedactionError), + #[error("{0}: {1}")] + Request(ruma::api::client::error::ErrorKind, Cow<'static, str>, http::StatusCode), + #[error(transparent)] + Ruma(#[from] ruma::api::client::error::Error), + #[error("uiaa")] + Uiaa(ruma::api::client::uiaa::UiaaInfo), // unique / untyped #[error("{0}")] @@ -117,7 +115,7 @@ impl Error { pub fn message(&self) -> String { match self { Self::Federation(ref origin, ref error) => format!("Answer from {origin}: {error}"), - Self::RumaError(ref error) => response::ruma_error_message(error), + Self::Ruma(ref error) => response::ruma_error_message(error), _ => format!("{self}"), } } @@ -136,7 +134,7 @@ impl Error { pub fn status_code(&self) -> http::StatusCode { match self { - Self::Federation(_, ref error) | Self::RumaError(ref error) => error.status_code, + Self::Federation(_, ref error) | Self::Ruma(ref error) => error.status_code, Self::Request(ref kind, _, code) => response::status_code(kind, *code), Self::BadRequest(ref kind, ..) => response::bad_request_code(kind), Self::Conflict(_) => http::StatusCode::CONFLICT,