3 个版本 (破坏性)
0.3.0 | 2024年1月30日 |
---|---|
0.2.0 | 2023年10月13日 |
0.1.0 | 2023年10月12日 |
#276 in 国际化(i18n)
8KB
63 行
ErrorInfo
为国际化准备的中心化错误信息。
此 crate 的主要导出是 trait 和 derive 宏 ErrorInfo
#[derive(ErrorInfo)]
pub enum CustomErrorCode {
#[error(status = StatusCode::BAD_REQUEST, message = "Bad request: {reason}")]
BadRequest { reason: &'static str },
#[error(status = StatusCode::INTERNAL_SERVER_ERROR, message = "Internal server error")]
InternalServerError,
}
然后您应该能够检索错误信息
let bad_request = CustomErrorCode::BadRequest {
reason: "invalid parameter",
};
assert_eq!(bad_request.status(), StatusCode::BAD_REQUEST);
assert_eq!(bad_request.code(), "BAD_REQUEST");
assert_eq!(bad_request.raw_message(), "Bad request: {reason}");
assert_eq!(bad_request.message(), "Bad request: invalid parameter");
assert_eq!(
bad_request.fields(),
HashMap::from([("reason".into(), "invalid parameter".to_string())])
);
或者收集任何 crate 中声明的每个错误(启用 summary
功能),这简化了网络服务的错误管理
let summary = error_info::summary();
fs::write(
"./assets/error-codes.json",
serde_json::to_string_pretty(&summary)?,
)?
// Writes:
//
// [
// {
// "status": 400,
// "code": "BAD_REQUEST",
// "raw_message": "Bad request: {reason}",
// },
// {
// "status": 500,
// "code": "INTERNAL_SERVER_ERROR",
// "raw_message": "Internal server error",
// }
// ]
您还可以使用您喜欢的本地化格式导出这些数据,并与前端团队共享。
依赖项
~3.5–5MB
~92K SLoC