I am trying to build a transaction
function insert_job
which looks like the following:
Example
use diesel::{insert_into, Connection, RunQueryDsl};
use super::{
models::{ConverterResult, DbJob, JobStatus},
schema::jobs::dsl::*,
};
use crate::job::JobBundle;
fn insert_job<C>(conn: &mut C, job: &JobBundle)
where
C: Connection,
{
let j = DbJob {
id: job.id,
status: JobStatus::Idle,
blob_digest: job.blob_digest.clone(),
name: job.name.clone(),
converter_result: ConverterResult::None,
converter_log: "".to_owned(),
};
insert_into(jobs).values(j).execute(conn);
}
The execute(conn)
actually is excatly the same written as I did but Rust wants me to put all sorts of bounds on the Connection
(why?):
error[E0277]: the trait bound `<C as diesel::Connection>::Backend: DieselReserveSpecialization` is not satisfied
--> components/common/src/db/transactions.rs:21:41
|
21 | insert_into(jobs).values(j).execute(conn);
| ------- ^^^^ the trait `DieselReserveSpecialization` is not implemented for `<C as diesel::Connection>::Backend`
| |
| required by a bound introduced by this call
|
= note: required for `InsertStatement<table, ValuesClause<..., ...>>` to implement `QueryFragment<<C as diesel::Connection>::Backend>`
= note: the full type name has been written to '/home/nixos/Desktop/Repos/markdown-to-pdf-service/target/debug/deps/common-407478c3fbb79c9d.long-type-15797717890643199462.txt'
= note: required for `InsertStatement<table, ValuesClause<..., ...>>` to implement `ExecuteDsl<C>`
= note: the full type name has been written to '/home/nixos/Desktop/Repos/markdown-to-pdf-service/target/debug/deps/common-407478c3fbb79c9d.long-type-15797717890643199462.txt'
note: required by a bound in `diesel::RunQueryDsl::execute`
--> /home/nixos/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.1.4/src/query_dsl/mod.rs:1432:15
|
1429 | fn execute(self, conn: &mut Conn) -> QueryResult<usize>
| ------- required by a bound in this associated function
...
1432 | Self: methods::ExecuteDsl<Conn>,
| ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::execute`
help: consider further restricting the associated type
|
11 | C: Connection, <C as diesel::Connection>::Backend: DieselReserveSpecialization
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error[E0277]: the trait bound `DefaultValues: QueryFragment<<C as diesel::Connection>::Backend, <<C as diesel::Connection>::Backend as SqlDialect>::DefaultValueClauseForInsert>` is not satisfied
--> components/common/src/db/transactions.rs:21:41
and the list goes on and on...
Does anybody know where I have to watch out when writting such a generic function. I thougth that works, but it seems totally nontrivial.