12 个稳定版本 (5 个主要版本)
使用旧的 Rust 2015
5.3.0 | 2019 年 12 月 12 日 |
---|---|
5.2.1 | 2019 年 11 月 22 日 |
5.2.0 | 2019 年 10 月 18 日 |
5.1.0 | 2019 年 4 月 30 日 |
0.1.0 | 2018 年 8 月 16 日 |
#485 在 Rust 模式
198 每月下载量
用于 14 个 crate (7 个直接)
48KB
662 行
该库的目的是通过简化程序代码中的错误处理,帮助在 Rust 中更高效地编写命令行程序或原型。
这个 crate 引入了 Problem
类型,可以用于高级 API,其中错误处理简化为
- 报告错误消息(例如使用
error!
宏记录), - 在错误不是错误的情况下中止程序(例如使用
panic!
宏), - 冒泡错误(例如使用
?
), - 忽略错误(例如使用
Result::ok
)。
目标
- 简化可能失败的函数的签名到一个错误类型,以便更容易组合。
- 通过
Display
格式化生成详细的用户友好的错误消息,包括错误原因链和回溯(如果请求)。 - 在不同的场景下方便地向错误消息添加上下文。
- 在不同的场景下方便地报告(打印或记录)或中止程序上的错误。
- 轻松构造
Problem
类型(例如从字符串字面量)。 - 与现有错误类型和程序流程的低成本集成。
- 最小化对良好路径的性能影响。
- 通过消除外部错误类型中的生命周期来允许错误冒泡。
非目标
- 提供匹配特定错误变体的能力,以方便从错误条件中恢复。
- 零成本错误路径 - 例如没有分配。
Sync
或Send
兼容性。
示例
隐式转换为 Problem
类型和上下文消息。
use problem::prelude::*;
fn foo() -> Result<String, Problem> {
let str = String::from_utf8(vec![0, 123, 255])?;
Ok(str)
}
let result = foo().problem_while("creating string");
assert_eq!(result.unwrap_err().to_string(), "while creating string got error caused by: invalid utf-8 sequence of 1 bytes from index 2");
使用 .or_failed_to()
处理致命错误。
use problem::prelude::*;
use problem::format_panic_to_stderr;
// Replace Rust default panic handler
format_panic_to_stderr();
fn foo() -> Result<String, Problem> {
let str = String::from_utf8(vec![0, 123, 255])?;
Ok(str)
}
let _s = foo().or_failed_to("create a string"); // Fatal error: Panicked in src/lib.rs:464:25: Failed to create a string due to: invalid utf-8 sequence of 1 bytes from index 2
查看更多示例,请参阅 crate 文档:docs.rs.
如果您正在寻找一种完全类型化、零成本的向错误值添加上下文的方法,请参阅 error-context crate.
依赖项
约2.5–3.5MB
约74K SLoC