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_executor
with 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.