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每月下载次数

ISC许可证

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