#error #deprecated #diagnostics #annotate #information #path #info

已删除 error-annotation

已弃用:请使用 anyhow 代替

0.1.4 2023年4月8日
0.1.3 2022年1月31日
0.1.2 2022年1月31日
0.1.1 2022年1月31日
0.1.0 2022年1月31日

#10 in #annotate


pathutil 中使用

MIT 许可证

13KB
195

已弃用

请使用 anyhow 代替。

旧信息

使用诊断信息注释错误。

当前仅有的文档是 API 文档


lib.rs:

在错误值传播过程中添加有用的诊断信息。

可注释错误类型

对于实现 Annotatable 的类型,可以通过 AnnotateResult::annotate_err_into 方法以最便捷的方式使用,该方法为 Result 实现了。在这种情况下,可以构建诊断注释,而不会改变结果错误类型。使用 std::io::ErrorAnnotatable 实现的示例说明了这些便捷性

示例:在 std::io::Error 上链式添加诊断注释

use std::path::{Path, PathBuf};
use std::fs::Metadata;
use error_annotation::{AnnotateResult, ErrorAnnotation};

fn annotated_copy(src: &Path, dst: &Path) -> std::io::Result<u64> {
  std::fs::copy(src, dst)
    .annotate_err_into("source", || src.display())
    .annotate_err_into("destination", || dst.display())
}

let badsource = PathBuf::from("/this/path/does/not/exist");
let dest = PathBuf::from("/tmp/woah-dude");
let res = annotated_copy(&badsource, &dest);
let err = res.err().unwrap();

assert_eq!(&err.to_string(), "

No such file or directory (os error 2)
-with source: /this/path/does/not/exist
-with destination: /tmp/woah-dude

".trim());

注释其他错误类型

仍然可以通过 ErrorAnnotation 参数化类型,用注释信息类型 I 注释一个不实现 Annotatable 的任意错误类型 T。缺点是每个注释对应一个不同的参数化,即 ErrorAnnotation<T, I>,它必须通过接口传播并由消费代码显式处理。

无运行时依赖