Rust Actix和Diesel-使用QueryDsl通过关闭?

Rust Actix和Diesel-使用QueryDsl通过关闭?,rust,Rust,我用的是Actix和Diesel。我的设置方式是使用一个DbExecutor——一个异步工作程序,它接收消息并返回它们所表示的查询结果,如下所示: #[派生(消息)] #[rtype(result=“result”)] 发布结构检索用户{ 发布uid:i64, } DbExecutor的impl处理程序{ // ... fn handle(&mut self,msg:InsertFile,\:&mut self::Context)->self::Result{ 使用板条箱::模式::用户::ds

我用的是Actix和Diesel。我的设置方式是使用一个
DbExecutor
——一个异步工作程序,它接收消息并返回它们所表示的查询结果,如下所示:

#[派生(消息)]
#[rtype(result=“result”)]
发布结构检索用户{
发布uid:i64,
}
DbExecutor的impl处理程序{
// ...
fn handle(&mut self,msg:InsertFile,\:&mut self::Context)->self::Result{
使用板条箱::模式::用户::dsl::*;
// ...
Ok(users.filter(uid.eq(msg.uid)).execute(connection))
}
}
fn my_route_handler(){
db_executor.send(RetrieveUser{uid:123});
//...
}
但是,有一个表不适合这些简单的查询,我想从消息发送者的侧面指定过滤器。我想我可以发送一条包含闭包的消息,该闭包接受
用户
对象,然后在
DbExecutor
一侧执行它,返回结果:

fn我的理想路线处理程序(){
db|u executor.send(RetrieveUsers{谓词:| users | users.filter(uid.eq(123))});
}
但是,我被卡住了,因为所有的
消息
都必须实现
复制
,而且
柴油机
类型令人困惑-我不确定如何在编译时指定我需要的类型,例如:

//失败
#[导出(消息)]
#[rtype(result=“result”)]
发布结构检索用户{
pub谓词:dyn-FnOnce(dyn-QueryDsl)->dyn-RunQueryDsl,
}
我也不确定这种做法是否明智,因此我愿意接受其他建议,这些建议将:

  • 允许我动态查询表
  • 仍然保持大部分数据库处理是分开的,而不是整个项目中的所有处理,就好像我在传递普通数据库连接一样
  • (理想情况下)利用对数据库的并发访问