9个版本
0.2.6 | 2024年2月23日 |
---|---|
0.2.5 | 2024年2月23日 |
0.1.4 | 2024年2月18日 |
#4 in #error-derive
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