No código abaixo estou recebendo este erro:
error[E0599]: no method named `commit` found for mutable reference `&mut sqlx::PgConnection` in the current scope
--> src/main.rs:103:12
|
103 | db.commit().await?;
| ^^^^^^ method not found in `&mut PgConnection`
Preciso confirmar se db
for, None
já que estou iniciando uma nova transação com: &mut self.pool.begin().await?
.
Não há problema em usar db: Option<&mut sqlx::PgConnection>
como tipo de argumento ou devo usar outra coisa, como Acquire
trait?
pub async fn find_player_id(
&self,
db: Option<&mut sqlx::PgConnection>,
id: &str,
team_id: &str,
) -> Result<String, Error> {
let db = match db {
Some(db) => db,
None => &mut self.pool.begin().await?,
};
let _ = self.team_service.find_team_id(Some(db), team_id).await?;
let player_id = self.repo.find_player_id(Some(db), id).await?;
db.commit().await?;
Ok(player_id)
}
ATUALIZAR:
Alguém no SO fechou a questão porque acha que é uma duplicata de Por que preciso importar uma característica para usar os métodos que ela define para um tipo? .
Isso não é, eu acho. Por favor, leia a pergunta antes de agir.
É verdade que uma característica deve estar no escopo para que seus métodos estejam disponíveis. A característica que fornece
commit
éAnyConnectionBackend
. No entanto, essa característica requer que oany
recurso esteja habilitado, que você desabilitou comdefault-features = false
. Então, basta adicionar um recursoany
asqlx
e entãouse sqlx::postgres::any::AnyConnectionBackend;
. (Comany
desativado, o analisador de ferrugem não conseguiu nem encontrarAnyConnectionBackend
para sugerir importá-lo.)