#error-derive #macro-derive #backtrace #deal #approach #payload #error-link

micro_errors

处理错误而不采用 derive 宏方法的小工具

11 个版本 (6 个重大更新)

0.7.0 2024 年 8 月 15 日
0.6.0 2024 年 8 月 11 日
0.5.0 2024 年 8 月 9 日
0.4.0 2024 年 8 月 8 日
0.1.3 2024 年 7 月 6 日

#469 in Rust 模式

Download history 202/week @ 2024-06-30 25/week @ 2024-07-07 3/week @ 2024-07-14 286/week @ 2024-07-28 294/week @ 2024-08-04 247/week @ 2024-08-11

每月 827 次下载

Apache-2.0

29KB
685

micro_errors

处理错误而不采用 derive 宏方法的小工具。

暴露一个结构体 ErrorLink_,通常用于 ResultErr 变体中。它包含一个泛型有效载荷,以及进一步包含 String 有效载荷的 ErrorLink_。最终的链接将指向 Backtrace。这个 Backtrace 是近似的,尤其是从非 ErrorLink_ 链接时。还要记住设置 RUST_BACKTRACE

对于泛型有效载荷作为 String,已经实现了辅助链接(例如,.map_err)的小工具。

代码片段

从非 ErrorLink_ 创建 ErrorLink_

use crate::ErrorLinkable;
pub fn function() -> Result<(), ErrorLink_<String>> {
    Err::<(), _>(std::io::Error::other("Underlying error."))
        .map_err(|e| e.as_link())
}

从非 ErrorLink_ 链接 ErrorLink_

use crate::ErrorLinkable;
pub fn function() -> Result<(), ErrorLink_<String>> {
    Err::<(), _>(std::io::Error::other("Underlying error."))
        .map_err(|e| e.link("Higher level error."))
}

从现有的 ErrorLink_ 链接 ErrorLink_

pub fn function() -> Result<(), ErrorLink_<String>> {
    Err::<(), _>(ErrorLink_::new_string("Underlying error."))
        .map_err(|e| e.link("Higher level error."))
}

错误显示/打印的输出如下。

Error no. 0: Higher level error.
Error no. 1: Underlying error.
Approximate backtrace of error no. 1:
   0: micro_errors::ErrorLink_<alloc::string::String>::new_string
             at ./src/lib.rs:270:51
   1: micro_errors::tests::test__chaining_error_link_
             at ./src/lib.rs:72:26
   2: micro_errors::tests::test__chaining_error_link_::{{closure}}
             at ./src/lib.rs:69:36
   3: core::ops::function::FnOnce::call_once
             at /rustc/051478957371ee0084a7c0913941d2a8c4757bb9/library/core/src/ops/function.rs:250:5
   4: core::ops::function::FnOnce::call_once
             at /rustc/051478957371ee0084a7c0913941d2a8c4757bb9/library/core/src/ops/function.rs:250:5
   5: test::__rust_begin_short_backtrace
             at /rustc/051478957371ee0084a7c0913941d2a8c4757bb9/library/test/src/lib.rs:625:18

无运行时依赖

功能