#error-derive #error #error-response #macro-derive #api-error #http-response #rest

actix-error-derive

一个简单的库,用于处理 REST 错误,并提供一个 derive 宏来生成错误类型。它还提供了与 actix-web 的兼容层。

9 个版本

0.2.6 2024年2月23日
0.2.5 2024年2月23日
0.1.4 2024年2月18日

#14 in #error-derive


用于 actix-error

MIT 许可证

13KB
160

actix-error

简介

derive(AsApiError) 库为使用 Actix-Web 的 Rust 开发者提供了一个强大的 derive 宏,可以轻松地将枚举变体转换为结构化 API 错误。该库通过允许自定义错误类型自动映射到 HTTP 响应错误,简化了 Web 应用程序中的错误处理。

功能

  • 自动转换:自动将枚举变体转换为 ApiError 实例,包括状态码、错误类型和消息。
  • 自定义错误响应:在枚举定义中直接自定义错误消息和 HTTP 状态码。
  • 支持结构化错误:处理带有额外上下文的错误,支持枚举变体中的无名称和有名称字段。
  • 分组错误处理:将相关错误分组,以便于错误管理。
  • 与 Actix-Web 集成:无缝集成到 Actix-Web 的错误处理机制中。

安装

[dependencies]
actix_error = "0.2.5"

使用

定义错误

使用 #[derive(AsApiError)] 宏在枚举上定义您的错误类型。使用 #[error] 属性自定义每个变体,指定 HTTP 状态码、错误消息等。

在 Actix-Web 中处理错误

实现您的 Actix-Web 处理程序以返回您的自定义错误。AsApiErrorTrait 确保它们自动转换为适当的 HTTP 响应。

async fn my_handler() -> Result<HttpResponse, MyError> {
    // Your handler logic here...
    Err(MyError::NotFound)
}

高级错误处理

对于需要额外上下文的错误,直接在枚举变体中使用命名或无名称字段。

#[derive(AsApiError)]
pub enum DetailedError {
    #[error(code = 500, msg = "Unexpected error occurred: {0}")]
    SystemError(String),
    #[error(status = "BadRequest", msg = "Invalid input: {field}")]
    ValidationError { field: DataField },
}

#[derive(AsApiError)]
pub enum Error {
    #[error(group)]
    Detailed(DetailedError), // Group errors together
    #[error(code = 500, msg = "Database error occurred", ignore)]
    DatabaseError(PostgresError), // Ignore the unnamed field
}

响应格式

{
    "kind": "system_error",
    "message": "Unexpected error occurred: Internal Server Error"
    
}

依赖项

~15–29MB
~478K SLoC