#error-context #attributes #macro #add #anyhow #u32 #string

进程宏 fn-error-context

为函数错误添加上下文的属性宏

5个版本

0.2.1 2023年3月21日
0.2.0 2021年7月7日
0.1.2 2021年4月21日
0.1.1 2020年7月11日
0.1.0 2020年3月29日

#229 in 进程宏

Download history 5286/week @ 2024-03-14 4849/week @ 2024-03-21 3394/week @ 2024-03-28 3546/week @ 2024-04-04 3929/week @ 2024-04-11 4331/week @ 2024-04-18 3879/week @ 2024-04-25 3872/week @ 2024-05-02 3586/week @ 2024-05-09 3969/week @ 2024-05-16 4031/week @ 2024-05-23 3829/week @ 2024-05-30 4301/week @ 2024-06-06 3556/week @ 2024-06-13 4789/week @ 2024-06-20 3185/week @ 2024-06-27

16,720 每月下载量
用于 8 crates

MIT/Apache

14KB
55

Crates.io Docs.rs

fn-error-context

为函数错误添加上下文的属性宏。

#[context("failed to parse config at `{}`", path.display())]
pub fn parse_config(path: &Path) -> anyhow::Result<u32> {
    let text = read_to_string(path)?;
    Ok(text.parse()?)
}

lib.rs:

该crate提供了context宏,用于为函数添加额外的错误信息。

anyhowfailure和其他提供字符串类型context方法的错误类型兼容。

#
use fn_error_context::context;

#[context("failed to parse config at `{}`", path.as_ref().display())]
pub fn parse_config(path: impl AsRef<Path>) -> anyhow::Result<u32> {
    let text = read_to_string(path.as_ref())?;
    Ok(text.parse()?)
}

let error = parse_config("not-found").unwrap_err();
assert_eq!(
    error.to_string(),
    "failed to parse config at `not-found`",
);
assert_eq!(
    error.source().unwrap().downcast_ref::<io::Error>().unwrap().kind(),
    io::ErrorKind::NotFound,
);

依赖项

~275–720KB
~17K SLoC