Eva*_*oll 7 rust warp rust-result
async fn handle_rejection(err: Rejection) -> Result<impl Reply, Infallible> {
Run Code Online (Sandbox Code Playgroud)
Result<ok, err>但是,这样的错误是绝对错误且永远无法达到的,有什么好处呢?为什么不直接返回一个impl Reply?
mca*_*ton 16
它通常意味着以下两件事之一:
该函数是特征的一部分,并且特征声明指示该方法可能失败并返回Result<T, E>. 现在,该特征的某些实现可能碰巧没有失败路径,并使用Infallible类似类型E。
一个标准库的例子就是特征FromStr。FromStr在 上实施时显然会失败u32,但在 上实施时则不会失败String。因此impl FromStr for String用于std::convert::Infallible其错误情况。
该函数将在需要一个容易出错的函数的上下文中使用。
您的示例就是这种情况。handle_rejection被传递给warp::Filter::recover,它需要一个容易出错的函数。这是有道理的,因为并非所有错误都是可恢复的,因此recover可能仍然需要处理这些错误。
现在,这是一个玩具示例,恰好能够处理所有错误,因此使用Infallible.