0.1.4 |
|
---|---|
0.1.3 |
|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#10 in #annotate
在 pathutil 中使用
13KB
195 行
已弃用
请使用 anyhow 代替。
旧信息
使用诊断信息注释错误。
当前仅有的文档是 API 文档。
lib.rs
:
在错误值传播过程中添加有用的诊断信息。
可注释错误类型
对于实现 Annotatable
的类型,可以通过 AnnotateResult::annotate_err_into
方法以最便捷的方式使用,该方法为 Result
实现了。在这种情况下,可以构建诊断注释,而不会改变结果错误类型。使用 std::io::Error
的 Annotatable
实现的示例说明了这些便捷性
示例:在 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>
,它必须通过接口传播并由消费代码显式处理。