#source #chain #format #error #std-error

source-chain

使用它格式化 StdError 及其源链

1 个不稳定版本

0.1.0 2023年6月20日

#90#chain

Download history 32/week @ 2024-04-08 12/week @ 2024-04-15 11/week @ 2024-04-22 8/week @ 2024-05-06 20/week @ 2024-05-13 13/week @ 2024-05-20 10/week @ 2024-05-27 67/week @ 2024-06-10 23/week @ 2024-06-17 89/week @ 2024-06-24 6/week @ 2024-07-01 29/week @ 2024-07-08 36/week @ 2024-07-15 29/week @ 2024-07-22

每月120次下载
pg_task 中使用

MIT 许可证

5KB

License Crates.io Docs.rs

source-chain

使用它格式化 StdError 及其源链

#[derive(Debug, thiserror::Error)]
enum Error {
    #[error("unknown file {1}")]
    UnknownFile(#[source] std::io::Error, &'static str),
}

fn file_error() -> Result<String, Error> {
    let filename = "unknown-file.txt";
    std::fs::read_to_string(filename).map_err(|e| Error::UnknownFile(e, filename))
}

let err = file_error().unwrap_err();
assert_eq!(
    source_chain::to_string(&err),
    "unknown file unknown-file.txt\nCaused by:\n\tNo such file or directory (os error 2)"
);

let dyn_err: Box<dyn std::error::Error> = Box::new(err);
assert_eq!(
    // notice dereferencing
    source_chain::to_string(&*dyn_err),
    "unknown file unknown-file.txt\nCaused by:\n\tNo such file or directory (os error 2)"
);

贡献

我们感谢所有类型的贡献,谢谢!

关于 README 的说明

大部分的 README 是通过 cargo-sync-readme 自动从 crate 文档中复制的。这样 README 总是与文档同步,并且示例已经过测试。

所以,如果您想更改 README 中的某个部分,在 <!-- cargo-sync-readme start --><!-- cargo-sync-readme end --> 标记之间,请不要直接编辑 README.md,而是更改 src/lib.rs 顶部的文档,然后与 README 同步

cargo sync-readme

(请确保已安装 cargo 命令)

cargo install cargo-sync-readme

如果您已安装 rusty-hook,则更改将在提交时自动应用。

许可证

本项目采用 MIT 许可证

无运行时依赖