【问题标题】:Warp error: error[E0277]: the trait bound `impl warp::Future: warp::filter::FilterBase` is not satisfied扭曲错误:错误[E0277]:特征绑定`impl warp::Future: warp::filter::FilterBase`不满足
【发布时间】:2021-07-29 06:35:06
【问题描述】:

Warp 正在返回错误,

error[E0277]: the trait bound `impl warp::Future: warp::filter::FilterBase` is not satisfied
  --> src/http.rs:31:26
   |
31 |     let routes = index().or(users());
   |                             ^^^^^^^ the trait `warp::filter::FilterBase` is not implemented for `impl warp::Future`

我基本上有这个,

pub async fn users() -> impl Filter<Extract = impl warp::Reply, Error = warp::Rejection> + Clone {
  # stuff
}

我做错了什么?

【问题讨论】:

    标签: rust type-definition rust-warp


    【解决方案1】:

    or 接受一个返回Filter 的函数。您的函数标记为async,并返回Future&lt;Output = Filter&gt;。您可以改用 or_else,or 的异步版本:

    let routes = index().or_else(users());
    

    【讨论】:

    • OrElse 虽然没有返回过滤器,但当我使用它时,我发现我的函数必须接受参数。 .or 不需要它的函数带参数:.or(warp::header("x-forwarded-for")) Like here 没有参数。
    • 我收到这些错误 OrElse&lt;T, F&gt; _不满足 &lt;_ as warp::Future&gt;::Output = Result&lt;_, _&gt; 不满足 _: warp::Future
    • "OrElse 不返回过滤器" 是的,OrElse 是 Filter。
    • or_else 接收到一个潜在的Rejection,并且必须返回一个TryFuture (Future&lt;Output = Result&lt;&gt;&gt;)
    • 您可以简单地更新您的函数签名以匹配它。
    猜你喜欢
    • 2021-03-28
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多