1 个不稳定版本
0.1.0 | 2023年10月12日 |
---|
#17 在 #into
37 每月下载量
用于 5 个 crate(2 个直接)
6KB
58 行
错误上下文
有时候实现一个特质时需要返回一个特定的错误,而代码内部可以返回多种不同的错误。
当所有错误都定义在用户无法控制的 crates 中时,问题变得更加棘手,因为这些 crates 没有实现 From
和看起来很棒的 ?
。
应用级别错误
其中一个解决方案是创建一个应用级别的 Error,为应用需要处理的错误实现 From
,并为上述描述中的讨厌的特质函数错误实现 Into
。
仍然需要在代码中不断使用 map_err
。
ErrorContext 用于消除 map_err
trait ApiToImplement {
fn important_fn() -> Result<String, ApiError>;
}
impl ApiToImplement for MyStruct {
fn important_fn() -> Result<String, ApiError> {
MyAppError::context(|| {
method1()?;
method2()?;
Ok(method3())
})
}
}
考虑到 method1
、method2
、method3
都返回不同的错误,上面的代码看起来比显式转换每个调用的错误要干净得多
method1().map_err(|e| /*conversion*/)?;
method2().map_err(|e| /*conversion*/)?;
method3().map_err(|e| /*conversion*/)
许可证
Apache 2.0