#749·warp

发布 `Tuple` 或 `Func` 特征

作者: mraerino创建于 2020年11月15日更新于 2025年2月18日
标签feature

您的功能请求是否与问题有关?请描述。

我正在尝试基于 warp 实现一种意见主导的 API 构建器模式。示例:

rust
pub struct ApiBuilder<F> {
    filter: F,
}

impl<F: Filter<Error = Rejection>> ApiBuilder<F> {
    pub fn mount<N, H, Fut, R>(self, filter: N, handler: H) -> ApiBuilder<impl Filter>
    where
        F::Future: TryFuture,
        N: Filter<Error = Rejection, Extract = ()> + Clone + Send,
        N::Future: TryFuture,
        H: Fn() -> Fut + Clone + Send,
        Fut: TryFuture<Ok = R, Error = Rejection> + Send,
        R: Reply,
    {
        let action = filter.and_then(handler);
        let filter = self.filter.or(action);
        ApiBuilder { filter }
    }
}

此示例仅在我将 Filter::Extract 限制为空元组时才能编译。如果我想允许使用任意过滤器并暴露值,我需要使用 FuncTuple 特性来引入限制,但目前无法从 crate 用户访问这些特性。

内容来源: seanmonstar/warp