#error #conversion #context #from #into

nightly no-std errorcon

一个小型 crate,用于错误范围和易于错误转换

1 个不稳定版本

0.1.0 2023年10月12日

#17#into

37 每月下载量
用于 5 个 crate(2 个直接)

Apache-2.0

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())
        })
    }
}

考虑到 method1method2method3 都返回不同的错误,上面的代码看起来比显式转换每个调用的错误要干净得多

method1().map_err(|e| /*conversion*/)?;
method2().map_err(|e| /*conversion*/)?;
method3().map_err(|e| /*conversion*/)

许可证

Apache 2.0

无运行时依赖

特性