I am trying to make some convenience methods so I can call banana.get(&conn, &pk)
or banana.delete(&conn)
on an instance of Banana
, but I can't get the trait bounds right and seem to keep getting a recursion error:
Cargo.toml
[package]
name = "m"
version = "0.1.0"
edition = "2018"
[dependencies]
diesel = { version = "1.4.5", features = ["postgres"] }
src/lib.rs
use diesel::PgConnection;
use diesel::{
associations::{HasTable, Identifiable},
delete,
query_dsl::QueryDsl,
result::QueryResult,
};
pub trait DbModel: HasTable + Identifiable + QueryDsl {
fn get(
conn: &PgConnection,
pk: &<Self as Identifiable>::Id,
) -> QueryResult<Self> {
Self::table().find(pk).first(conn)
}
fn delete(&self, conn: &PgConnection) -> QueryResult<usize> {
delete(self).execute(conn)
}
}
Errors on build:
error[E0275]: overflow evaluating the requirement `_: std::marker::Sized`
--> src/lib.rs:14:23
|
14 | Self::table().find(pk).first(conn)
| ^^^^
|
= help: consider adding a `#![recursion_limit="256"]` attribute to your crate (`m`)
= note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl<_>` for `<<Self as diesel::associations::HasTable>::Table as diesel::query_builder::AsQuery>::Query`
Errors for delete
when get
is commented out:
error[E0275]: overflow evaluating the requirement `_: std::marker::Sized`
--> src/lib.rs:18:9
|
18 | delete(self).execute(conn)
| ^^^^^^
|
::: /home/danj/.cargo/registry/src/github.com-1ecc6299db9ec823/diesel-1.4.5/src/query_builder/functions.rs:135:18
|
135 | pub fn delete<T: IntoUpdateTarget>(source: T) -> DeleteStatement<T::Table, T::WhereClause> {
| ---------------- required by this bound in `diesel::query_builder::functions::delete`
|
= help: consider adding a `#![recursion_limit="256"]` attribute to your crate (`m`)
= note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl<_>` for `<<Self as diesel::associations::HasTable>::Table as diesel::query_builder::AsQuery>::Query`
= note: required because of the requirements on the impl of `diesel::query_builder::update_statement::target::IntoUpdateTarget` for `&Self`
Compiling using cargo 1.46.0-nightly (c26576f9a 2020-06-23)