5个版本
0.2.3 | 2023年3月4日 |
---|---|
0.2.2 | 2023年3月4日 |
0.2.1 | 2023年3月4日 |
0.2.0 | 2023年3月4日 |
0.1.0 | 2023年3月4日 |
#2093 in Rust模式
27每月下载次数
8KB
121 代码行
error_hook
此库根据每个函数补充错误并执行钩子。
示例
use error_hook::{self, hook};
#[hook(e => tracing::error!("{e}"))]
#[tracing::instrument]
async fn test(a: i32, b: i32) -> error_hook::Result<i32> {
a.checked_mul(b).ok_or(anyhow::anyhow!("overflow"))
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::INFO)
.init();
let ans = test(888888888, 888888888).await?;
println!("{ans}");
Ok(())
}
输出
2023-03-04T06:23:33.048087Z ERROR test{a=888888888 b=888888888}: example: overflow
lib.rs
:
error_hook
是一个库,用于在错误转换时插入操作。
示例
use error_hook_attr::hook;
#[hook(e => println!("{e}"))]
fn test(a: i32, b: i32) -> error_hook::Result<i32> {
a.checked_mul(b).ok_or(anyhow::anyhow!("overflow"))
}
fn main() -> anyhow::Result<()> {
let _ = test(888888888, 888888888);
// ^^^^ this prints 'overflow'
Ok(())
}
依赖项
~4–5MB
~110K SLoC