3 个不稳定版本

0.2.1 2022年12月17日
0.2.0 2022年7月9日
0.1.0 2022年7月7日

1571Rust 模式

每月下载量 49

MIT 许可证

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