From d9e2e1a17750415a3c710d1226327475c1c95a72 Mon Sep 17 00:00:00 2001 From: mpostma Date: Wed, 27 May 2020 10:20:54 +0200 Subject: [PATCH] ErrorCode improvements --- meilisearch-error/src/lib.rs | 32 ++++++++++++++++++++++++++------ meilisearch-http/src/error.rs | 17 ++++++++++++----- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/meilisearch-error/src/lib.rs b/meilisearch-error/src/lib.rs index 4afe8a46e..63f94f655 100644 --- a/meilisearch-error/src/lib.rs +++ b/meilisearch-error/src/lib.rs @@ -1,10 +1,29 @@ -#![allow(dead_code)] - use std::fmt; + use actix_http::http::StatusCode; pub trait ErrorCode: std::error::Error { fn error_code(&self) -> Code; + + /// returns the HTTP status code ascociated with the error + fn http_status(&self) -> StatusCode { + self.error_code().http() + } + + /// returns the doc url ascociated with the error + fn error_url(&self) -> String { + self.error_code().url() + } + + /// returns error name, used as error code + fn error_name(&self) -> String { + self.error_code().name() + } + + /// return the error type + fn error_type(&self) -> String { + self.error_code().r#type() + } } enum ErrorType { @@ -106,21 +125,22 @@ impl Code { } /// return the HTTP status code ascociated with the `Code` - pub fn http(&self) -> StatusCode { + fn http(&self) -> StatusCode { self.err_code().status_code } /// return error name, used as error code - pub fn name(&self) -> String { + fn name(&self) -> String { self.err_code().err_name.to_string() } /// return the error type - pub fn r#type(&self) -> String { + fn r#type(&self) -> String { self.err_code().err_type.to_string() } - pub fn url(&self) -> String { + /// return the doc url ascociated with the error + fn url(&self) -> String { format!("docs.meilisearch.come/error/{}", self.name()) } } diff --git a/meilisearch-http/src/error.rs b/meilisearch-http/src/error.rs index 75567087d..606b54b65 100644 --- a/meilisearch-http/src/error.rs +++ b/meilisearch-http/src/error.rs @@ -14,6 +14,14 @@ pub struct ResponseError { inner: Box, } +impl error::Error for ResponseError {} + +impl ErrorCode for ResponseError { + fn error_code(&self) -> Code { + self.inner.error_code() + } +} + impl fmt::Display for ResponseError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { self.inner.fmt(f) @@ -204,17 +212,16 @@ impl fmt::Display for Error { impl aweb::error::ResponseError for ResponseError { fn error_response(&self) -> aweb::HttpResponse { - let error_code = self.inner.error_code(); ResponseBuilder::new(self.status_code()).json(json!({ "message": self.to_string(), - "errorCode": error_code.name(), - "errorType": error_code.r#type(), - "errorLink": error_code.url(), + "errorCode": self.error_name(), + "errorType": self.error_type(), + "errorLink": self.error_url(), })) } fn status_code(&self) -> StatusCode { - self.inner.error_code().http() + self.http_status() } }