rust 如何在任何实现PgExecutor的类型上实现trait?

niwlg2el  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(113)

我有自己的trait来扩展PgExecutor trait提供的功能。
我想在任何实现PgExecutor的东西上实现这些trait,但老实说,我很难做到这一点。

#[async_trait]
impl<'a, T> PgExecutorExt for T
    where T: PgExecutor<'a> + Sync
 {
    async fn my_read_method(&self) -> anyhow::Result<()> {
        sqlx::query_as!(...)
        .fetch_one(self)
        .await?;

        Ok(())
    }
}

但我得到以下错误:

the trait bound `&T: Executor<'_>` is not satisfied
the trait `Executor<'_>` is not implemented for `&T`

关于.fetch_one(self)调用
有人知道发生了什么吗谢谢!

ws51t4hk

ws51t4hk1#

Executor::fetch_one()函数接受self,而不是&self。您需要在trait定义和这个实现中将&self更改为self,这样就可以解决这个问题了。

相关问题