I am trying to create a struct that I can use in diesel for insertion. Specifically I am making the struct Insertable. On compile I get this error.
I have a struct that I am trying to make Insertable
via the derive attribute. I have a field called Bounty
which is supposed to represent money, so I'm using BigDecimal
as the type. Upon compilation, I get the error in the title. I've also tried using f64
but that gives the same error.
#[macro_use]
extern crate diesel;
extern crate bigdecimal;
mod schema {
use bigdecimal::BigDecimal;
table! {
Threads (Id) {
Id -> Int8,
Views -> Int4,
Points -> Int4,
FlagPoints -> Int4,
IsDisabled -> Bool,
IsAnswered -> Bool,
Bounty -> Numeric,
Title -> Varchar,
Body -> Text,
UserId -> Int8,
CreatedBy -> Varchar,
CreatedOn -> Timestamptz,
LastModifiedBy -> Varchar,
LastModifiedOn -> Timestamptz,
}
}
#[allow(non_snake_case)]
#[derive(Debug, Insertable)]
#[table_name = "Threads"]
pub struct InsertableThread {
pub Bounty: BigDecimal,
pub Title: String,
pub Body: String,
pub UserId: i64
}
}
fn main() {}
I have my struct inside it's own file and this is the entire code. The struct Thread
compiles without issue. The error happens on InsertableThread
as it is the one using BigDecimal
. This is the error that results.
error[E0277]: the trait bound `bigdecimal::BigDecimal: diesel::Expression` is not satisfied
--> src/main.rs:29:21
|
29 | #[derive(Debug, Insertable)]
| ^^^^^^^^^^ the trait `diesel::Expression` is not implemented for `bigdecimal::BigDecimal`
|
= note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Numeric>` for `bigdecimal::BigDecimal`
error[E0277]: the trait bound `bigdecimal::BigDecimal: diesel::Expression` is not satisfied
--> src/main.rs:29:21
|
29 | #[derive(Debug, Insertable)]
| ^^^^^^^^^^ the trait `diesel::Expression` is not implemented for `bigdecimal::BigDecimal`
|
= note: required because of the requirements on the impl of `diesel::Expression` for `&bigdecimal::BigDecimal`
= note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Numeric>` for `&bigdecimal::BigDecimal`
error[E0277]: the trait bound `bigdecimal::BigDecimal: diesel::Expression` is not satisfied
--> src/main.rs:29:21
|
29 | #[derive(Debug, Insertable)]
| ^^^^^^^^^^ the trait `diesel::Expression` is not implemented for `bigdecimal::BigDecimal`
|
= note: required because of the requirements on the impl of `diesel::Expression` for `&'insert bigdecimal::BigDecimal`
= note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Numeric>` for `&'insert bigdecimal::BigDecimal`
I am using Rust 1.34, diesel 1.4.2 and Postgres 11.
I am willing to change the types either in the database, Postgres, or in the Rust code. The database uses numeric
and in the Rust code I've tried both f64
and BigDecimal
. I am also willing to implement the trait directly myself, but I need some guidance on how to do that as I could not find samples.
Thread
serve? Is it required to reproduce the error? Please ensure your minimal reproducible example is minimal. – Shepmastertable_name
is currently unknown to the compiler and may have meaning added to it in the future. Please review how to create a minimal reproducible example and then edit your question to include it. Try to reproduce your error in a brand new Cargo project. There are Rust-specific MCVE tips and Diesel tips you can use to reduce your original code for posting here. – ShepmasterTitle
,Bounty
, etc required? Please ensure your minimal reproducible example is minimal. – Shepmaster