Есть ли процесс, с помощью которого я могу определить правильные типы для своих функций дизеля?
Я использую 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
будет правильный тип из документации, где я ошибся?