wp-error

Crates.iowp-error
lib.rswp-error
version0.7.6
created_at2026-01-10 00:08:53.11026+00
updated_at2026-01-10 00:29:59.327771+00
descriptionStructured, domain-specific error types and robustness strategies extracted from WarpParse
homepagehttps://github.com/wp-labs/wp-error
repositoryhttps://github.com/wp-labs/wp-error
max_upload_size
id2033207
size109,610
seeker-zuo (seeker-zuo)

documentation

https://docs.rs/wp-error

README

wp_err - 错误处理库

CI codecov License

wp_err 是从 warp-parse 数据处理平台拆分出来的综合性错误处理库,面向配置、解析、数据源和分发等领域,提供结构化错误类型、统一的系统错误码以及健壮性策略。该 crate 现在可以独立发布到 crates.io,用于任何需要领域化错误建模和策略化处理的 Rust 项目。

为什么发布为 crate?

  • 复用 warp-parse 的生产级错误体系,而无需引入其它内部依赖。
  • orion-error 系列库保持兼容,提供一致的 ErrorCode 行为。
  • 为 CI/CD、插件或 CLI 工具提供可预测的系统错误码(SysErrorCode),方便日志与指标打通。

快速开始

添加依赖

[dependencies]
wp-error = "0.7"

最小示例

use wp_err::config_error::{ConfError, ConfResult};

fn load_conf() -> ConfResult<()> {
    // ... 业务配置加载逻辑
    Ok(())
}

主要功能

  • 领域特定错误类型config_errorparse_errorsource_errordist_errorrun_error 覆盖配置、解析、数据源、分发及运行态。
  • 可配置的错误策略:通过 error_handling 模块定义 Debug/Normal/Strict 等健壮性模式与策略,可组合重试、容忍或抛出等行为。
  • 实用工具:提供解析错误位置转换、字符串处理工具、SysErrorCode 的统一映射等能力。

模块说明

模块 描述
config_error 配置相关错误类型与工具,ConfReason 实现 ErrorCode 并返回 SysErrorCode
parse_error 解析/OML 相关错误
source_error 数据源错误类型
dist_error 分发/接收端错误类型
run_error 运行时错误类型和转换,保留 SourceFocus::Other/Disconnect 等细粒度原因

错误处理

模块 描述
error_handling 错误处理策略与健壮性模式
error_handling::strategy 错误处理策略实现
error_handling::target 预留扩展位

更多使用示例

错误转换

use wp_err::run_error::{RunErrorOwe, RunResult};

fn process_data() -> RunResult<()> {
    let rs = do_something();
    rs.to_sink_error()?; // 失败时转换为接收端错误
    Ok(())
}

健壮性模式设置

use wp_err::error_handling::{RobustnessMode, set_system_robustness_mode};

let prev = set_system_robustness_mode(RobustnessMode::Strict);

系统错误码契约(SysErrorCode)

wp_err 统一定义跨模块/对外公开的系统错误码(SysErrorCode)。所有领域错误类型都可映射为稳定的 u16 码值,并在实现 orion_error::ErrorCode 时返回该码值。

  • 访问方式:use wp_err::SysErrorCode; reason.sys_code()
  • 对具体非泛型枚举(RunReason/SinkReason/SourceReason/OMLCodeReason 等)实现了 ErrorCode::error_code(),可直接得到 sys_code。

约定(示例,实际以 src/codes.rs 为准,更详细规划见 CODES.md):

  • 配置错误 (ConfReason<*>)
    • Core: Syntax=42201, NotFound=40401, Uvs=50001
    • Feature: Syntax=42202, NotFound=40402, Uvs=50002
    • Dynamic: Syntax=42203, NotFound=40403, Uvs=50003
  • 解析/OML (OMLCodeReason / DataErrKind)
    • OML: Syntax=42211, NotFound=40411, Uvs=50011
    • Data: Format=42212, NotComplete=42213, UnParse=40412, Less/Empty=42214/42215, LessStc=42216, LessDef=42217
  • 数据源 (SourceReason)
    • NoData=20401, EOF=20402, Disconnect=49901, Supplier/Other=50201/50209, Uvs=50021
  • 分发 (SinkReason)
    • SinkError=50211, StgCtrl=50311, Mock=50312, Uvs=50031
  • 运行聚合 (RunReason)
    • Dist(SinkError/StgCtrl)=50211/50311
    • Source(NoData/Eof/Supplier/Disconnect)=20401/20402/50201/49901
    • Uvs=50041

使用建议:

  • 对外接口/日志/指标统一使用 sys_code(),若需 HTTP 映射可在上层做二次映射(例如 404xx→404,422xx→422,502xx→502)。
  • 如需扩展码值,请在 src/codes.rs 补充映射并同步更新 CODES.md

文档与支持

许可证

wp_err 在 Elastic License 2.0 下发布,详情参见项目根目录的 LICENSE 文件。

Commit count: 5

cargo fmt