3 个版本
0.1.2 | 2022 年 10 月 23 日 |
---|---|
0.1.1 | 2022 年 10 月 23 日 |
0.1.0 | 2022 年 10 月 12 日 |
#2688 在 Rust 模式
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.
许可
该项目根据以下之一许可:
- Apache 许可证 2.0 版,(LICENSE.apache-2.0 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE.MIT 或 https://opensource.org/licenses/MIT)