Trait SaveRepositoryTransaction

Source
pub trait SaveRepositoryTransaction<M>: SaveRepository<M> + TransactionRepository<M>
where M: Model + Send + Sync,
{ // 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§

Source

fn save_in_transaction<'a>( &'a self, model: M, ) -> impl Future<Output = Result<M, Error>> + Send + 'a
where M: 'a,

Saves a model in a transactions, ensuring atomicity.

This method:

  1. Creates a transactions using with_transaction
  2. Calls save_with_executor with the transactions
  3. Returns the model on successful save
§Parameters
  • model: The model to save
§Returns

A future that resolves to:

  • Ok(M): The saved model on success
  • Err(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 197)
175async fn main() {
176    install_default_drivers();
177
178    initialize_db_pool(
179        PoolOptions::new()
180            .max_connections(21)
181            .min_connections(5)
182            .idle_timeout(Duration::from_secs(60 * 10))
183            .max_lifetime(Duration::from_secs(60 * 60 * 24))
184            .acquire_timeout(Duration::from_secs(20))
185            .connect(&DATABASE_URL)
186            .await
187            .expect("Failed to connect to database"),
188    );
189
190    let user = User {
191        id: 1,
192        name: String::new(),
193    };
194
195    USER_REPO.save_ref(&user).await.unwrap();
196
197    USER_REPO.save_in_transaction(user.clone()).await.unwrap();
198
199    USER_REPO
200        .save_with_context(user.clone(), UserContext::System)
201        .await
202        .unwrap();
203
204    USER_REPO.with_transaction(action).await.unwrap();
205
206    USER_REPO
207        .delete_by_values_in_transaction("id", [1, 2, 3, 11, 22])
208        .await
209        .unwrap();
210}

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.

Implementors§