pub trait SaveRepositoryTransaction<M>: SaveRepository<M> + TransactionRepository<M>{
// Provided method
fn save_in_transaction<'a>(
&'a self,
model: M,
) -> impl Future<Output = Result<M, Error>> + Send + 'a
where M: 'a { ... }
}Expand description
Extension trait for Save operations with transactions.
This trait provides convenience methods for using transactions with repositories
that implement SaveRepository. It’s automatically implemented for any type that
implements both SaveRepository<M> and TransactionRepository<M>.
Provided Methods§
Sourcefn save_in_transaction<'a>(
&'a self,
model: M,
) -> impl Future<Output = Result<M, Error>> + Send + 'awhere
M: 'a,
fn save_in_transaction<'a>(
&'a self,
model: M,
) -> impl Future<Output = Result<M, Error>> + Send + 'awhere
M: 'a,
Saves a model in a transactions, ensuring atomicity.
This method:
- Creates a transactions using
with_transaction - Calls
save_with_executorwith the transactions - Returns the model on successful save
§Parameters
model: The model to save
§Returns
A future that resolves to:
Ok(M): The saved model on successErr(crate::Error): The error if saving failed
§Example
ⓘ
let saved_model = repo.save_in_transaction(model).await?;Examples found in repository?
examples/basic_repo.rs (line 200)
178async fn main() {
179 install_default_drivers();
180
181 initialize_db_pool(
182 PoolOptions::new()
183 .max_connections(21)
184 .min_connections(5)
185 .idle_timeout(Duration::from_secs(60 * 10))
186 .max_lifetime(Duration::from_secs(60 * 60 * 24))
187 .acquire_timeout(Duration::from_secs(20))
188 .connect(&DATABASE_URL)
189 .await
190 .expect("Failed to connect to database"),
191 );
192
193 let user = User {
194 id: 1,
195 name: String::new(),
196 };
197
198 USER_REPO.save_ref(&user).await.unwrap();
199
200 USER_REPO.save_in_transaction(user.clone()).await.unwrap();
201
202 USER_REPO
203 .save_with_context(user.clone(), UserContext::System)
204 .await
205 .unwrap();
206
207 USER_REPO.with_transaction(action).await.unwrap();
208
209 USER_REPO
210 .delete_by_values_in_transaction("id", [1, 2, 3, 11, 22])
211 .await
212 .unwrap();
213
214 USER_REPO
215 .get_one_by_filter(UserFilter::new("name").id(1))
216 .await
217 .unwrap();
218}Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.