about summary refs log tree commit diff
path: root/src/errors.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/errors.rs')
-rw-r--r--src/errors.rs133
1 files changed, 0 insertions, 133 deletions
diff --git a/src/errors.rs b/src/errors.rs
deleted file mode 100644
index dd0e12c045..0000000000
--- a/src/errors.rs
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright (C) 2018  Vincent Ambo <mail@tazj.in>
-//
-// This file is part of Converse.
-//
-// Converse is free software: you can redistribute it and/or modify it
-// under the terms of the GNU Affero General Public License as
-// published by the Free Software Foundation, either version 3 of the
-// License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public
-// License along with this program. If not, see
-// <http://www.gnu.org/licenses/>.
-
-//! This module defines custom error types using the `failure`-crate.
-//! Links to foreign error types (such as database connection errors)
-//! are established in a similar way as was tradition in
-//! `error_chain`, albeit manually.
-
-use std::result;
-use actix_web::{ResponseError, HttpResponse};
-use actix_web::http::StatusCode;
-
-// Modules with foreign errors:
-use actix;
-use actix_web;
-use askama;
-use diesel;
-use r2d2;
-use reqwest;
-use tokio_timer;
-
-pub type Result<T> = result::Result<T, ConverseError>;
-
-#[derive(Debug, Fail)]
-pub enum ConverseError {
-    #[fail(display = "an internal Converse error occured: {}", reason)]
-    InternalError { reason: String },
-
-    #[fail(display = "a database error occured: {}", error)]
-    Database { error: diesel::result::Error },
-
-    #[fail(display = "a database connection pool error occured: {}", error)]
-    ConnectionPool { error: r2d2::Error },
-
-    #[fail(display = "a template rendering error occured: {}", reason)]
-    Template { reason: String },
-
-    #[fail(display = "error occured during request handling: {}", error)]
-    ActixWeb { error: actix_web::Error },
-
-    #[fail(display = "error occured running timer: {}", error)]
-    Timer { error: tokio_timer::Error },
-
-    #[fail(display = "user {} does not have permission to edit post {}", user, id)]
-    PostEditForbidden { user: i32, id: i32 },
-
-    #[fail(display = "thread {} is closed and can not be responded to", id)]
-    ThreadClosed { id: i32 },
-
-    // This variant is used as a catch-all for wrapping
-    // actix-web-compatible response errors, such as the errors it
-    // throws itself.
-    #[fail(display = "Actix response error: {}", error)]
-    Actix { error: Box<ResponseError> },
-}
-
-// Establish conversion links to foreign errors:
-
-impl From<diesel::result::Error> for ConverseError {
-    fn from(error: diesel::result::Error) -> ConverseError {
-        ConverseError::Database { error }
-    }
-}
-
-impl From<r2d2::Error> for ConverseError {
-    fn from(error: r2d2::Error) -> ConverseError {
-        ConverseError::ConnectionPool { error }
-    }
-}
-
-impl From<askama::Error> for ConverseError {
-    fn from(error: askama::Error) -> ConverseError {
-        ConverseError::Template {
-            reason: format!("{}", error),
-        }
-    }
-}
-
-impl From<actix::MailboxError> for ConverseError {
-    fn from(error: actix::MailboxError) -> ConverseError {
-        ConverseError::Actix { error: Box::new(error) }
-    }
-}
-
-impl From<actix_web::Error> for ConverseError {
-    fn from(error: actix_web::Error) -> ConverseError {
-        ConverseError::ActixWeb { error }
-    }
-}
-
-impl From<reqwest::Error> for ConverseError {
-    fn from(error: reqwest::Error) -> ConverseError {
-        ConverseError::InternalError {
-            reason: format!("Failed to make HTTP request: {}", error),
-        }
-    }
-}
-
-impl From<tokio_timer::Error> for ConverseError {
-    fn from(error: tokio_timer::Error) -> ConverseError {
-        ConverseError::Timer { error }
-    }
-}
-
-// Support conversion of error type into HTTP error responses:
-
-impl ResponseError for ConverseError {
-    fn error_response(&self) -> HttpResponse {
-        // Everything is mapped to internal server errors for now.
-        match *self {
-            ConverseError::ThreadClosed { id } => HttpResponse::SeeOther()
-                .header("Location", format!("/thread/{}#post-reply", id))
-                .finish(),
-            _ => HttpResponse::build(StatusCode::INTERNAL_SERVER_ERROR)
-                .body(format!("An error occured: {}", self))
-        }
-    }
-}