web-dev-qa-db-ja.com

Rust / Diesel:クエリを実行し、uuidを持つpostgresテーブルに挿入する方法

ディーゼルによって生成された次のスキーマがあります。

table! {
user (id) {
    id -> Uuid,
    name -> Text
}

および関連モデル

use diesel::{
    self,
    Queryable,
    Insertable,
};
use diesel::prelude::*;
use diesel::sql_types::Uuid;
use super::schema::user;

#[derive(Queryable)]
pub struct User {
    pub id: Uuid,
    pub name: String,
}

impl User {

    pub fn get(id: i32, connection: &PgConnection) -> Vec<User> {
        user::table.load::<User>(connection).unwrap()
    }
}

これをコンパイルしようとするとエラーが発生します:

21 |         user::table.load::<User>(connection).unwrap()                                                                                                                              
   |                         ^^^^ the trait `diesel::Queryable<diesel::sql_types::Uuid, diesel::pg::Pg>` is not implemented for `diesel::sql_types::Uuid` 

挿入しようとすると、Expressionが実装されていないという同様のエラーが表示されます。

これは依存関係の問題か、モデルに追加するのを忘れた可能性がある問題でしょうか?

[dependencies]
rocket = "0.4.0-rc.1"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
diesel = { version = "1.0.0", features = ["postgres", "uuid"] }
r2d2 = "*"
r2d2-diesel = "*"

[dependencies.rocket_contrib]
version = "0.4.0-rc.1"
default-features = false
features = ["json", "diesel_postgres_pool", "uuid"]
10
user3912090

構造体のタイプは、SQLタイプではなく、Rustタイプである必要があります。具体的には id crate からのUuidです(ディーゼル1.3では、バージョン0.6はDieselでサポートされています)質問のコードでは、Uuiddiesel::sql_types::Uuidに展開されています

#[derive(Queryable)]
pub struct User {
    pub id: uuid::Uuid,
    pub name: String,
}
4
canab