3 个版本

0.1.2 2022 年 10 月 23 日
0.1.1 2022 年 10 月 23 日
0.1.0 2022 年 10 月 12 日

#2688Rust 模式

MIT/Apache

29KB
311

nuhound

增强错误跟踪的 Rust 库

Rust 程序员通常发现问号操作符在从 Result 和 Option 中提取值以及在 Err 或 None 的情况下立即返回调用上下文时非常有价值。该包通过以下方式提供了对此功能的增强:

  • 将 Result::Err 和 Option::None 值转换为单个 Nuhound 类型错误;
  • 创建一个错误链,有助于定位错误的来源;
  • 提供 disclose 功能,通过包括导致错误的源文件的文件名、行号和列号来增强错误消息。当启用 disclose 功能时,此功能由 here! 宏提供;
  • 以简洁一致的风格简化错误处理。
  • 提供简单的实现,需要最小程度的代码修改。

请记住将其添加到 Cargo.toml 中

[features]
# To help diagnose errors, use the disclose feature when compiling.
# This ensures that the source file name and line number are displayed
# when using the here! macro.
# example usage: cargo build --features=disclose
disclose = []

示例

以下示例展示了如何使用 here 宏报告错误,同时仍然保留可以使用 trace 方法显示的底层错误或错误。

use nuhound::{Report, here, ResultExtension};

fn generate_error() -> Report<u32> {
    let text = "NaN";
    let value = text.parse::<u32>().report(|e| here!(e, "Oh dear - '{}' could not be \
    converted to an integer", text))?;
    Ok(value)
}

let result = generate_error();

match result {
    Ok(_) => unreachable!(),
    Err(e) => {
        println!("Display the error:\n{e}\n");
        println!("Or trace the error:\n{}\n", e.trace());
    }
}
// This will emit:
// Display the error:
// Oh dear - 'NaN' could not be converted to an integer
//
// Or trace the error:
// 0: Oh dear - 'NaN' could not be converted to an integer
// 1: invalid digit found in string
//
// This will also show the name of the file causing the error
// and the line and column number if the code is compiled with
// the disclose feature enabled.

许可

该项目根据以下之一许可:

无运行时依赖