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 模式
60,312 个月下载量
在 238 个crate中使用(27 个直接使用)
40KB
677 行
flex-error
flex-error
是一个轻量级的 Rust 库,它使用宏和特性在不同的错误跟踪实现和 no_std 之间切换。该库目前通过 Cargo 功能标志支持 3 种模式:eyre_tracer
(默认)、anyhow_tracer
和 string_tracer
(no_std)。
该库将几个概念作为特性分离出来:ErrorDetail
、ErrorTrace
和 ErrorSource
。
ErrorDetail
负责提供关于特定错误的结构化元数据信息。ErrorTracer
负责跟踪错误链和回溯。ErrorSource
允许将外部错误类型泛型转换为带有可选 ErrorTrace 的 ErrorDetail。- 应用程序错误是类型
ErrorReport<ErrorDetail, ErrorTracer>
,它同时包含错误详情和跟踪。
通过关注点的分离,flex-error
允许应用程序通过为相应的报告器实现 ErrorTracer
,轻松地在不同的错误报告实现之间切换,例如 eyre
和 anyhow
。
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