diff --git a/src/entity/gateway/entitygateway.rs b/src/entity/gateway/entitygateway.rs index 19ecaf6..7c58842 100644 --- a/src/entity/gateway/entitygateway.rs +++ b/src/entity/gateway/entitygateway.rs @@ -19,15 +19,15 @@ pub enum GatewayError { #[async_trait::async_trait] pub trait EntityGateway: Send + Sync { - async fn transaction(&'static mut self) -> Result, GatewayError> + async fn transaction<'a>(&'a mut self) -> Result, GatewayError> { unimplemented!(); } - async fn with_transaction(&'static mut self, _func: F) -> Result + async fn with_transaction<'a, F, Fut, R, E>(&'a mut self, _func: F) -> Result where - Fut: Future, R), E>> + Send, - F: FnOnce(Box) -> Fut + Send, + Fut: Future, R), E>> + Send + 'a, + F: FnOnce(Box) -> Fut + Send, R: Send, E: From, Self: Sized diff --git a/src/entity/gateway/inmemory.rs b/src/entity/gateway/inmemory.rs index f0c7d9e..653f1bb 100644 --- a/src/entity/gateway/inmemory.rs +++ b/src/entity/gateway/inmemory.rs @@ -10,13 +10,13 @@ use crate::entity::item::*; use std::sync::{Arc, Mutex}; -pub struct InMemoryGatewayTransaction { +pub struct InMemoryGatewayTransaction<'a> { working_gateway: InMemoryGateway, - original_gateway: &'static mut InMemoryGateway, + original_gateway: &'a mut InMemoryGateway, } #[async_trait::async_trait] -impl EntityGatewayTransaction for InMemoryGatewayTransaction { +impl<'a> EntityGatewayTransaction for InMemoryGatewayTransaction<'a> { fn gateway<'b>(&'b mut self) -> &'b mut dyn EntityGateway { &mut self.working_gateway } @@ -145,7 +145,7 @@ impl InMemoryGateway { #[async_trait::async_trait] impl EntityGateway for InMemoryGateway { - async fn transaction(&'static mut self) -> Result, GatewayError> + async fn transaction<'a>(&'a mut self) -> Result, GatewayError> { let working_gateway = { let users = self.users.lock().unwrap().clone(); @@ -182,10 +182,10 @@ impl EntityGateway for InMemoryGateway { } - async fn with_transaction(&'static mut self, func: F) -> Result + async fn with_transaction<'a, F, Fut, R, E>(&'a mut self, func: F) -> Result where - Fut: Future, R), E>> + Send, - F: FnOnce(Box) -> Fut + Send, + Fut: Future, R), E>> + Send + 'a, + F: FnOnce(Box) -> Fut + Send, R: Send, E: From, { diff --git a/src/entity/gateway/postgres/postgres.rs b/src/entity/gateway/postgres/postgres.rs index ceef84e..34f4ab3 100644 --- a/src/entity/gateway/postgres/postgres.rs +++ b/src/entity/gateway/postgres/postgres.rs @@ -559,17 +559,17 @@ async fn get_bank_meseta(conn: &mut sqlx::PgConnection, char_id: &CharacterEntit #[async_trait::async_trait] impl EntityGateway for PostgresGateway { - async fn transaction(&'static mut self) -> Result, GatewayError> + async fn transaction<'a>(&'a mut self) -> Result, GatewayError> { Ok(Box::new(PostgresTransaction { pgtransaction: self.pool.begin().await?, })) } - async fn with_transaction(&'static mut self, func: F) -> Result + async fn with_transaction<'a, F, Fut, R, E>(&'a mut self, func: F) -> Result where - Fut: Future, R), E>> + Send, - F: FnOnce(Box) -> Fut + Send, + Fut: Future, R), E>> + Send + 'a, + F: FnOnce(Box) -> Fut + Send, R: Send, E: From, {