Warp 拒绝处理器的典型示例是这个
async fn handle_rejection(err: Rejection) -> Result<impl Reply, Infallible> {
但是,如果err是Infallible类型并且永远不会被触发,那么使用Result<ok, err>有什么优势呢?为什么不直接返回impl Reply呢?
Warp 拒绝处理器的典型示例是这个
async fn handle_rejection(err: Rejection) -> Result<impl Reply, Infallible> {
但是,如果err是Infallible类型并且永远不会被触发,那么使用Result<ok, err>有什么优势呢?为什么不直接返回impl Reply呢?
该函数是trait的一部分,并且trait声明表明该方法可能失败并返回Result<T, E>
。现在,该trait的某些实现可能没有失败路径,并对E
使用类似于Infallible
的类型。
标准库的一个例子是FromStr
trait。当在u32
上实现FromStr
时,显然可能会失败,但在String
上实现时则不会失败。因此,impl FromStr for String
在其错误情况下使用std::convert::Infallible
。
该函数将用于期望可失败函数的上下文中。
这是你的例子。 handle_rejection
被传递给warp::Filter::recover
,该函数期望一个可失败函数。这是有道理的,因为并非所有错误都是可恢复的,因此recover
可能仍然需要处理这些错误。
现在,这只是一个玩具示例,可以处理所有错误,因此使用Infallible
。