直接使用“ postgres”时,`rocket_contrib…Uuid`未实现FromSql

问题描述 投票:0回答:1

我使用Rocket.rs框架制作了一个简单的REST-Api。对于数据库连接,我使用的是“ postgres”板条箱。

我的项目中具有以下依赖项:

[dependencies]
rocket = "0.4.3"
rocket_contrib = { version =  "0.4.3", features = ["uuid"]}
serde = "1.0.104"
serde_json = "1.0.48"
serde_derive = "1.0.104"
# 0.7.x instead 0.8 to be compatible with rocket_contrib
uuid = { version = "0.7.4", features = ["v4", "serde"] }
postgres = "0.17.2"
lazy_static = "1.4.0"

我直接使用“ postgres”板条箱,因此不是Rocket的数据库功能。我的查询如下:

pub fn get_all() -> Vec<Todo> {
    let mut db = crate::PG_CLIENT.lock().unwrap();

    for row in db.query("SELECT uuid, msg FROM rust_test.todo", &[]).unwrap() {
        let uuid: Uuid = row.get(0); // error happens here
        let msg: &str = row.get(1);
        println!("found todo: {:#?} {:#?}", uuid, msg);
    }
    vec![]
}

在运行时发生以下错误:特征postgres::types::FromSql<'_>未实现为rocket_contrib::uuid::uuid::Uuid

我不明白为什么postgres尝试将其映射到rocket_contrib::uuid::uuid::Uuid而不是uuid::Uuid。我该如何解决?

postgresql rust
1个回答
0
投票

我必须对Cargo.toml进行以下调整:

--- Cargo.toml  (revision 2f6cc20859846b27210e08660696459b3fe14b19)
+++ Cargo.toml  (date 1584360197150)
@@ -12,7 +12,6 @@
 serde = "1.0.104"
 serde_json = "1.0.48"
 serde_derive = "1.0.104"
-# 0.7.x instead 0.8 to be compatible with rocket_contrib
-uuid = { version = "0.7.4", features = ["v4", "serde"] }
-postgres = "0.17.2"
+uuid = { version = "0.8.1", features = ["v4", "serde"] }
+postgres = { version = "0.17.2", features = ["with-uuid-0_8"]}
 lazy_static = "1.4.0"

现在可以使用。

© www.soinside.com 2019 - 2024. All rights reserved.