use crate::prelude::{Model, SaveRepository, TransactionRepository};
use std::future::Future;
pub trait SaveRepositoryTransaction<M>: SaveRepository<M> + TransactionRepository<M>
where
M: Model + Send + Sync,
{
fn save_in_transaction<'a>(
&'a self,
model: M,
) -> impl Future<Output = Result<M, crate::Error>> + Send + 'a
where
M: 'a,
{
self.with_transaction(move |mut tx| async move {
let res = self.save_with_executor(&mut *tx, model).await;
(res, tx)
})
}
}
impl<T, M> SaveRepositoryTransaction<M> for T
where
T: SaveRepository<M> + TransactionRepository<M>,
M: Model + Send + Sync,
{
}