diff options
Diffstat (limited to 'src/errors.rs')
-rw-r--r-- | src/errors.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/errors.rs b/src/errors.rs index 3f00a2976a2a..c73379f0cafb 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -56,8 +56,11 @@ pub enum ConverseError { #[fail(display = "error occured running timer: {}", error)] Timer { error: tokio_timer::Error }, - #[fail(display = "user does not have permission to edit post {}", id)] - PostEditForbidden { id: i32 }, + #[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 @@ -119,7 +122,12 @@ impl From<tokio_timer::Error> for ConverseError { impl ResponseError for ConverseError { fn error_response(&self) -> HttpResponse { // Everything is mapped to internal server errors for now. - HttpResponse::build(StatusCode::INTERNAL_SERVER_ERROR) - .body(format!("An error occured: {}", self)) + match *self { + ConverseError::ThreadClosed { id } => HttpResponse::SeeOther() + .header("Location", format!("/thread/{}#edit-post", id)) + .finish(), + _ => HttpResponse::build(StatusCode::INTERNAL_SERVER_ERROR) + .body(format!("An error occured: {}", self)) + } } } |