接受具有 Rust 特征的可变和不可变泛型类型

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

我将 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 函数用于事务和池连接。而且我不想写重复的代码。我怎样才能做到这一点?

generics rust traits rust-sqlx
© www.soinside.com 2019 - 2024. All rights reserved.