我将 Rust 与 sqlx 和 postgres 一起使用来构建 REST API。我正在尝试构建一个
Database
结构,其中有一个通用的连接参数。
struct Database<T>
where
T: Sync + Send,
for<'a> &'a T: sqlx::Executor<'a, Database = Postgres>,
{
conn: T
}
T
将由结构拥有,并且 &T
有望实现 Executor
特征。
我可以使用
Pool<Postgres>
作为T
,因为&Pool<Postgres>
实现了Executor
.
我想要的是(这就是我将
conn
设为通用类型的原因)能够将 Transaction<Postgres>
用作 T
。但问题是 &Transaction<Postgres>
没有实现 Executor
特性,但是 &mut Transaction<Postgres>
实现了。
我想这样做的原因是我希望能够将一些 CRUD 函数用于事务和池连接。而且我不想写重复的代码。我怎样才能做到这一点?