Есть ли процесс, с помощью которого я могу определить правильные типы для своих функций дизеля?

Я использую Diesel и хотел бы передавать части своих запросов в функции и возвращать части запросов из функций. Я борюсь с разработкой моей подписи функции.

Я хочу загрузить сообщение в блоге по идентификатору, но сначала я хочу отфильтровать его:

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

Затем я собираюсь передать его другой функции для загрузки по идентификатору

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 ответов

Другие вопросы по тегам