#error #error-code #info #code

error-info

为国际化准备的中心化错误信息

3 个版本 (破坏性)

0.3.0 2024年1月30日
0.2.0 2023年10月13日
0.1.0 2023年10月12日

#276 in 国际化(i18n)


用于 graphql-starter

Apache-2.0

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