3 个不稳定版本
0.2.1 | 2022年12月17日 |
---|---|
0.2.0 | 2022年7月9日 |
0.1.0 | 2022年7月7日 |
1571 在 Rust 模式
每月下载量 49
7KB
127 行
anyhow_ext
anyhow 的扩展。anyhow 的直接替代品。
特性
- 在错误信息中附加文件位置信息
- 使用
dot
来生成小的回溯。
用法
与 anyhow 一起使用!
[dependencies]
anyhow = "1"
anyhow_ext = "0.2"
然后使用 anyhow_ext::Context
替代 anyhow::Context
。
use anyhow::{anyhow, Result};
use anyhow_ext::Context;
fn foo() -> Result<()> {
Err(anyhow!("an anyhow err")).context("wrap with file info")?;
Ok(())
}
anyhow 的直接替代品
由于 anyhow_ext
重新导出 anyhow
中的所有内容(除了 Context
),因此可以将 anyhow_ext 作为直接替代品使用。
Cargo.toml
[dependencies]
anyhow_ext = "0.2"
然后
use anyhow_ext::{Result,anyhow,Context};
fn foo() -> Result<()> {
Err(anyhow!("an anyhow err")).context("wrap with file info")?;
Ok(())
}
位置信息如何显示
println!("{}", err)
看起来像
foo err at `src/bin/anyhow_ext.rs@6:11`
和 println!("{:?}", err)
看起来像
foo err at `src/bin/anyhow_ext.rs@6:11`
Caused by:
0: read_a_file err at `src/bin/anyhow_ext.rs@10:19`
1: an io err at `src/bin/anyhow_ext.rs@15:55`
2: No such file or directory (os error 2)
dot
来生成小的回溯
use anyhow_ext::{Context, Result};
fn foo() -> Result<()> {
std::fs::read_to_string("file_not_exists.txt").dot()?;
Ok(())
}
fn bar() -> Result<()> {
foo().dot()?;
Ok(())
}
fn main() {
if let Err(err) = try_main().dot() {
println!("{:?}", err);
}
}
fn try_main() -> Result<()> {
bar().dot()?;
Ok(())
}
这将生成一个小回溯。
at `examples/dot.rs@14:34`
Caused by:
0: at `examples/dot.rs@20:11`
1: at `examples/dot.rs@9:11`
2: at `examples/dot.rs@4:52`
3: No such file or directory (os error 2)
依赖
~130KB