我使用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
。我该如何解决?
我必须对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"
现在可以使用。