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
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