#错误报告 #定义 #特性 #不同 #跟踪 # #灵活

不依赖 std flex-error

使用宏和特性进行灵活的错误定义

11 个不稳定版本 (3 个重大更新)

0.4.4 2021 年 10 月 20 日
0.4.3 2021 年 9 月 27 日
0.4.2 2021 年 8 月 3 日
0.4.1 2021 年 7 月 26 日
0.1.1 2021 年 5 月 27 日

#131 in Rust 模式

Download history 18809/week @ 2024-03-14 13498/week @ 2024-03-21 12704/week @ 2024-03-28 13460/week @ 2024-04-04 12862/week @ 2024-04-11 13247/week @ 2024-04-18 14554/week @ 2024-04-25 12446/week @ 2024-05-02 13603/week @ 2024-05-09 12370/week @ 2024-05-16 11992/week @ 2024-05-23 14052/week @ 2024-05-30 15035/week @ 2024-06-06 14935/week @ 2024-06-13 14936/week @ 2024-06-20 12742/week @ 2024-06-27

60,312 个月下载量
238 个crate中使用(27 个直接使用)

Apache-2.0

40KB
677

flex-error

Crate Docs Apache 2.0 Licensed

flex-error 是一个轻量级的 Rust 库,它使用宏和特性在不同的错误跟踪实现和 no_std 之间切换。该库目前通过 Cargo 功能标志支持 3 种模式:eyre_tracer(默认)、anyhow_tracerstring_tracer(no_std)。

该库将几个概念作为特性分离出来:ErrorDetailErrorTraceErrorSource

  • ErrorDetail 负责提供关于特定错误的结构化元数据信息。
  • ErrorTracer 负责跟踪错误链和回溯。
  • ErrorSource 允许将外部错误类型泛型转换为带有可选 ErrorTrace 的 ErrorDetail。
  • 应用程序错误是类型 ErrorReport<ErrorDetail, ErrorTracer>,它同时包含错误详情和跟踪。

通过关注点的分离,flex-error 允许应用程序通过为相应的报告器实现 ErrorTracer,轻松地在不同的错误报告实现之间切换,例如 eyreanyhow

flex-error 定义了一个 define_error! 宏,该宏用于定义自定义的 Detail 类型以及错误类型,作为 ErrorReport<Detail, DefaultTracer> 的别名。全局设置 DefaultTracer 类型是通过功能标志来实现的,这样应用程序的错误类型就不需要过度泛化。然而,这也意味着在同一个使用 flex-error 的 crate 中,不能同时使用多个 ErrorTracer 实现。

演示

flex-error-demo-full 目录中包含一个使用 eyre 报告错误的 示例程序。运行时带上 RUST_BACKTRACE=1 参数,应该会输出类似以下内容:

$ RUST_BACKTRACE=1 cargo run flex-error-demo-full

Error:
   0: error caused by foo: Foo has failed
   1: system error
   2: error1

Location:
   flex-error/flex-error/src/tracer_impl/eyre.rs:25

  ---------------------------------- BACKTRACE -----------------------------------
                                 5 frames hidden ⋮
   6: flex_error::tracer_impl::eyre::<impl flex_error::tracer::ErrorTracer<E> for eyre::Report>::new_trace::h471dd777954521dc
      at flex-error/flex-error/src/tracer_impl/eyre.rs:25
   7: flex_error::tracer::<impl flex_error::source::ErrorSource<Tracer> for flex_error::source::StdError<E>>::error_details::hba2719390b7121af
      at flex-error/flex-error/src/tracer.rs:26
   8: flex_error::report::ErrorReport<Detail,Trace>::trace_from::h39963733bcaf4442
      at flex-error/flex-error/src/report.rs:32
   9: flex_error_demo_full::foo::system_error::h9d131e83ad96a9bb
      at flex-error/flex-error/src/macros.rs:111
  10: flex_error_demo_full::main::hb0f615a97c840949
      at flex-error/flex-error-demo-full/src/main.rs:50

许可证

版权所有 © 2021 Informal Systems

遵循 Apache License 2.0(以下简称“许可证”);除非符合许可证规定,否则不得使用本存储库中的文件。您可以在以下地址获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“现状”提供,不提供任何明示或暗示的保证或条件。有关许可证的具体语言规定权限和限制,请参阅许可证。

依赖项

~75KB