4个版本
0.1.3 | 2024年3月24日 |
---|---|
0.1.2 | 2024年3月21日 |
0.1.1 | 2024年3月21日 |
0.1.0 | 2024年3月21日 |
#1412 in 进程宏
313 每月下载次数
用于 12 个crate (3 直接)
6KB
75 代码行
此宏将try表达式重写为调用 anyhow::Context::with_context
,该调用将try表达式的源位置作为上下文添加到错误中。
这创建了一个类似于回溯的东西,但实际上是错误传播的路径。这可能比使用anyhow的回溯功能更可取,因为它不依赖于栈展开或编译进调试符号。
以下是一个示例
use anyhow_trace::anyhow_trace;
use anyhow::{bail, Result};
fn foo_err() -> Result<()> {
bail!("this is foo error")
}
struct FooBar;
#[anyhow_trace]
impl FooBar {
fn thing() -> Result<()> {
fn im_inside() -> Result<()> {
foo_err()?;
Ok(())
}
im_inside()?;
Ok(())
}
}
#[anyhow_trace]
fn inner() -> Result<()> {
FooBar::thing()?;
Ok(())
}
#[anyhow_trace]
fn main() -> Result<()> {
inner()?;
Ok(())
}
这将打印以下内容
Error: main at examples/example.rs:30:5
Caused by:
0: inner at examples/example.rs:24:5
1: FooBar::thing at examples/example.rs:17:9
2: FooBar::thing::im_inside at examples/example.rs:14:13
3: this is foo error
依赖项
~260–700KB
~17K SLoC