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

actix-error

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

9个版本

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

#4 in #error-derive

MIT许可协议

7KB
51

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–26MB
~457K SLoC