我正在尝试学习rust和Actixweb与sqlx,我有一个函数,应该返回一个MySqlPool结构到一个控制器函数,这是我到目前为止
文件conn.rs
use sqlx::mysql::{MySqlPool, MySqlPoolOptions};
use std::future::Future;
pub async fn connect() -> Future<Output = sqlx::Result<MySqlPool>> {
//pub async fn connect() -> sqlx::Result<MySqlPool> {
let pool = MySqlPoolOptions::new()
.max_connections(5)
.connect("mysql://file:file@localhost:34536t/file").await?;
}
文件controllers.rs
use actix_web::{get, /*post,*/ HttpResponse, Responder};
use sqlx::mysql::{MySqlPool};
#[path= "conn.rs"]
mod conn;
use conn::connect;
#[get("/")]
pub async fn home() -> impl Responder {
let c: Result<MySqlPool> = connect().await;
match c {
Ok(v) => {
let row = sqlx::query_as("SELECT id FROM persons LIMIT 1")
.fetch_one(&v).await;
HttpResponse::Ok().body("good!")
},
Err(v) => {
HttpResponse::Ok().body("bad!")
}
}
}
当我运行cargo build时,我得到了这个错误错误[E0782]:trait对象必须包含dyn
关键字
如果我添加了dyn关键字,我有其他错误,你能帮助理解我做错了什么吗?
1条答案
按热度按时间shyt4zoc1#
异步函数的语法不包括返回的
Future
,它是隐式的:如果你想显式地指定它(通常你不这样做,但有一些合理的原因,比如想返回
Pin<Box<dyn Future>>
),你可以去掉async
并返回impl Future
: