是否有一个过程可以确定柴油功能的正确类型?

时间:2018-07-19 10:35:45

标签: types rust rust-diesel

我正在使用Diesel,并希望将查询的一部分传递给函数,并从函数返回查询的一部分。我正在努力制定函数签名。

我想按ID加载博客文章,但首先要过滤它:

let query = wp_posts
    .filter(post_type.eq("solution_article"))
    .filter(post_status.eq("publish"))
    .limit(1);

然后我将其传递给另一个函数以按ID加载

pub fn query_by_id<Q>(db: &PooledMySqlConnection, query: Q, id: u64) -> Option<Post>
where
    Q: QueryDsl,
{
    let result = query.filter(ID.eq(id)).load::<Post>(db);
    if let Ok(mut result) = result {
        return result.pop();
    }
    None
}

这不起作用,因为我正在努力寻找Q的正确类型。通常,编译器没有太大帮助(或者我不理解):

error[E0275]: overflow evaluating the requirement `<Q as diesel::query_dsl::filter_dsl::FilterDsl<_>>::Output`
  --> src/endpoint.rs:37:10
   |
37 |         .filter(ID.eq(id))
   |          ^^^^^^
   |
   = help: consider adding a `#![recursion_limit="2048"]` attribute to your crate

我多次提高了递归限制,但无济于事。

类似地,我想从一个函数返回我的普通过滤器,所以我也需要找到这种类型。

虽然我可以肯定有人可以告诉我要使用的正确类型,但是我该如何逐步查找自己呢?我确定QueryDsl是文档中正确的类型,我哪里出错了?

0 个答案:

没有答案