#actix-web #traits #error-response #status-code #macro #enums

awred

为 actix_web::ResponseError 特性提供一个便捷的 derive 宏。

3 个不稳定版本

0.2.0 2021年9月26日
0.1.1 2021年9月25日
0.1.0 2021年9月25日

#25 in #error-response

MIT 许可证

10KB
126 代码行

awred

actix_web::ResponseError 特性提供一个便捷的 derive 宏。

示例

使用枚举

use awred::ResponseError;
use serde::Serialize;
use thiserror::Error;

#[derive(Debug, Error, ResponseError, Serialize)]
pub enum AnError {
    #[error("Requested resource was not found")]
    #[status_code(NOT_FOUND)]
    ResourceNotFound,

    #[error("Forbidden: {reason}")]
    #[status_code(FORBIDDEN)]
    Forbidden { reason: String },

    // Internal Server Error
    #[error(transparent)]
    #[serde(skip)]
    IoError(#[from] std::io::Error),
}

使用结构体

#[derive(Debug, Error, ResponseError, Serialize)]
#[error("Invalid username or password")]
#[status_code(BAD_REQUEST)]
pub struct InvalidCredentials;

详情

  • 状态码(来自 actix_web::http::StatusCode)通过 #[status_code(...)] 属性指定
  • 没有 #[status_code(...)] 属性的变体/结构体将返回空体的 Internal Server Error
  • 响应体由序列化的错误和消息组成(error.to_string()

错误响应体格式

{
    "error": "error",
    "message": "error.to_string()",
}

依赖项

~1.5MB
~35K SLoC