move the error to thiserror

This commit is contained in:
Dietrich 2021-04-01 15:40:19 +02:00
parent 34b957332e
commit 583e9908bf
Signed by: dietrich
GPG Key ID: 9F3C20C0F85DF67C
3 changed files with 29 additions and 75 deletions

9
Cargo.lock generated
View File

@ -2392,6 +2392,7 @@ dependencies = [
"slog-term", "slog-term",
"sqlx", "sqlx",
"tera", "tera",
"thiserror",
] ]
[[package]] [[package]]
@ -3362,18 +3363,18 @@ dependencies = [
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.23" version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e"
dependencies = [ dependencies = [
"thiserror-impl", "thiserror-impl",
] ]
[[package]] [[package]]
name = "thiserror-impl" name = "thiserror-impl"
version = "1.0.23" version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0"
dependencies = [ dependencies = [
"proc-macro2 1.0.24", "proc-macro2 1.0.24",
"quote 1.0.8", "quote 1.0.8",

View File

@ -34,7 +34,8 @@ rand="0.8"
rpassword = "5.0" rpassword = "5.0"
clap = "2.33" clap = "2.33"
fluent-templates = { version = "0.6", features = ["tera"] } fluent-templates = { version = "0.6", features = ["tera"] }
fluent-langneg ="0.13" fluent-langneg = "0.13"
thiserror = "1.0"
[build-dependencies] [build-dependencies]
actix-web-static-files = "3.0" actix-web-static-files = "3.0"

View File

@ -24,47 +24,44 @@ use actix_web::HttpResponse;
use qrcode::types::QrError; use qrcode::types::QrError;
use sqlx::{Pool, Sqlite}; use sqlx::{Pool, Sqlite};
use thiserror::Error;
#[derive(Debug)] #[derive(Error, Debug)]
pub enum ServerError { pub enum ServerError {
Argonautic, #[error("Failed to encrypt the password {0} - aborting!")]
Database(sqlx::Error), Argonautica(argonautica::Error),
DatabaseMigration(sqlx::migrate::MigrateError), #[error("The database could not be used: {0}")]
Environment, Database(#[from] sqlx::Error),
Template(tera::Error), #[error("The database could not be migrated: {0}")]
Qr(QrError), DatabaseMigration(#[from] sqlx::migrate::MigrateError),
Io(std::io::Error), #[error("The environment file could not be read")]
Environment(#[from] std::env::VarError),
#[error("The templates could not be rendered correctly: {0}")]
Template(#[from] tera::Error),
#[error("The qr-code could not be generated: {0}")]
Qr(#[from] QrError),
#[error("Some error happened during input and output: {0}")]
Io(#[from] std::io::Error),
#[error("Error: {0}")]
User(String), User(String),
} }
impl std::fmt::Display for ServerError { impl From<argonautica::Error> for ServerError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn from(e: argonautica::Error) -> Self {
match self { Self::Argonautica(e)
Self::Argonautic => write!(f, "Argonautica Error"),
Self::Database(e) => write!(f, "Database Error: {}", e),
Self::DatabaseMigration(e) => {
write!(f, "Migration Error: {}", e)
}
Self::Environment => write!(f, "Environment Error"),
Self::Template(e) => write!(f, "Template Error: {:?}", e),
Self::Qr(e) => write!(f, "Qr Code Error: {:?}", e),
Self::Io(e) => write!(f, "IO Error: {:?}", e),
Self::User(data) => write!(f, "{}", data),
}
} }
} }
impl actix_web::error::ResponseError for ServerError { impl actix_web::error::ResponseError for ServerError {
fn error_response(&self) -> HttpResponse { fn error_response(&self) -> HttpResponse {
match self { match self {
Self::Argonautic => HttpResponse::InternalServerError().json("Argonautica Error"), Self::Argonautica(_) => HttpResponse::InternalServerError().json("Argonautica Error"),
Self::Database(e) => { Self::Database(e) => {
HttpResponse::InternalServerError().json(format!("Database Error: {:?}", e)) HttpResponse::InternalServerError().json(format!("Database Error: {:?}", e))
} }
Self::DatabaseMigration(_) => { Self::DatabaseMigration(_) => {
unimplemented!("A migration error should never be rendered") unimplemented!("A migration error should never be rendered")
} }
Self::Environment => HttpResponse::InternalServerError().json("Environment Error"), Self::Environment(_) => HttpResponse::InternalServerError().json("Environment Error"),
Self::Template(e) => { Self::Template(e) => {
HttpResponse::InternalServerError().json(format!("Template Error: {:?}", e)) HttpResponse::InternalServerError().json(format!("Template Error: {:?}", e))
} }
@ -77,51 +74,6 @@ impl actix_web::error::ResponseError for ServerError {
} }
} }
impl From<std::env::VarError> for ServerError {
fn from(e: std::env::VarError) -> Self {
eprintln!("Environment error {:?}", e);
Self::Environment
}
}
impl From<sqlx::Error> for ServerError {
fn from(err: sqlx::Error) -> Self {
eprintln!("Database error {:?}", err);
Self::Database(err)
}
}
impl From<sqlx::migrate::MigrateError> for ServerError {
fn from(err: sqlx::migrate::MigrateError) -> Self {
eprintln!("Database error {:?}", err);
Self::DatabaseMigration(err)
}
}
impl From<argonautica::Error> for ServerError {
fn from(e: argonautica::Error) -> Self {
eprintln!("Authentication error {:?}", e);
Self::Argonautic
}
}
impl From<tera::Error> for ServerError {
fn from(e: tera::Error) -> Self {
eprintln!("Template error {:?}", e);
Self::Template(e)
}
}
impl From<QrError> for ServerError {
fn from(e: QrError) -> Self {
eprintln!("Template error {:?}", e);
Self::Qr(e)
}
}
impl From<std::io::Error> for ServerError {
fn from(e: std::io::Error) -> Self {
eprintln!("IO error {:?}", e);
Self::Io(e)
}
}
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub enum Protocol { pub enum Protocol {
Http, Http,