我有一个 Warp 拒绝处理程序,我正在这样使用它,
.recover(handle_rejection)
是这样声明的,
pub async fn handle_rejection(err: Rejection) -> Result<impl warp::reply::Reply, Infallible> {
if
如果语句的两边是相同的类型,
if let Some(e) = err.find::<crate::api::error::UserError>() {
Ok(warp::reply::with_status(
warp::reply::reply(),
warp::http::StatusCode::NOT_FOUND,
))
}
else {
Ok(warp::reply::with_status(
warp::reply::reply(),
warp::http::StatusCode::NOT_FOUND,
))
}
一切正常,但如果将其中一侧更改为,
Ok(e.into_response())
不行了,编译时出现这个错误,
error[E0308]: mismatched types
--> src/api.rs:22:8
|
22 | Ok(warp::reply::with_status(
| ____________________^
23 | | warp::reply::reply(),
24 | | warp::http::StatusCode::NOT_FOUND,
25 | | ))
| |_________________^ expected struct `Response`, found struct `WithStatus`
|
不过我不明白,因为那面没有改变,这应该仍然满足impl warp::reply::Reply
,这里有什么问题?
as warp::reply::Reply
我已经尝试过像和 as一样明确地转换为特征对象的不同排列,&dyn warp::reply::Reply
但它们也不起作用。