2 个版本
新版本 0.1.1 | 2024 年 8 月 17 日 |
---|---|
0.1.0 | 2024 年 8 月 17 日 |
64 在 国际化 (i18n) 中
每月 192 次下载
10KB
141 行
standard-error
standard-error
是一个 Rust 包,旨在简化为各种地区处理错误信息。它从 YAML 和其他来源读取错误信息,为您的应用程序提供一种结构化和高效的管理错误的方式。
功能
- 特定地区的错误消息:自动获取指定地区的错误消息。
- 灵活的数据源:从 YAML 文件和其他格式读取错误消息。
- 易于集成:设计为与 Rust 网络框架(如
Axum
)无缝工作。
用法
以下是在使用 standard-error
的 Web 应用程序中,使用 Axum
框架的示例
use axum::{
extract::Query,
Json,
http::StatusCode,
};
use serde_json::{json, Value};
use std::collections::HashMap;
use standard_error::StandardError;
pub async fn my_handler(Query(params): Query<HashMap<String, String>>) -> Result<Json<Value>, StandardError> {
let group = match params.get("name") {
Some(g) => g,
None => {
return Err(StandardError::from("ER-0037", StatusCode::BAD_REQUEST));
}
};
Ok(Json(json!({"message": "success"})))
}
说明
- 错误处理:在示例中,StandardError 用于处理缺少必需查询参数的情况。如果未提供组参数,则函数返回带有适当错误代码和 HTTP 状态的 StandardError。
- 错误代码:使用错误代码 "ER-0037" 根据地区查找相关错误消息。
安装
将 standard-error 添加到您的 Cargo.toml 中
[dependencies]
standard-error = "0.1"
或使用 cargo
cargo add standard-error
配置
要配置 standard-error,您可以提供包含不同地区错误消息的 YAML 文件。该包将自动根据您的应用程序中指定的地区加载正确消息。
示例 YAML 结构
errors:
- code: ER-0001
detail_en_US: "Missing required 'group' parameter."
detail_hi_IN: "'group' पैरामीटर आवश्यक है।"
- code: ER-0002
detail_en_US: "Permission Denied"
detail_hi_IN: "अनुमति अस्वीकृत"
- code: ER-0003
detail_en_US: "Not Found"
detail_hi_IN: "नहीं मिला"
将此 YAML 文件(
errors.yaml
)放在目录根目录中,在src
之外。或者您可以在任何您喜欢的地方保存它,并设置ERROR_YAML_FILE_PATH
环境变量。
至于地区配置,默认情况下,该包从
DEFAULT_LOCALE
环境变量中获取默认值,默认设置为en_US
。
- 您可以更改此环境变量为任何您喜欢的值,只要您的错误 yaml 文件中存在相应的键。
如果您希望在任何给定点以编程方式动态更改地区,可以调用
standard_error::set_current_locale
函数,如下所示
use standard_error::set_current_locale;
fn my_business_logic(){
//...
set_current_locale("hi_IN");
//...
}
这设置了一个线程局部refcell变量,它将在整个线程中持续存在。由于它是一个
RefCell
值,而不是像Arc
这样的东西,所以你不必担心它泄漏到其他线程/请求中。
依赖项
~11MB
~209K SLoC