predawn_sea_orm/
function.rs1use std::sync::Arc;
2
3use snafu::OptionExt;
4
5use crate::{
6 error::{Error, NotFoundDataSourceSnafu, NotSetDataSourcesSnafu},
7 DataSources, Transaction, DATA_SOURCES, DEFAULT_DATA_SOURCE,
8};
9
10#[inline(always)]
11pub async fn default_txn() -> Result<Transaction, Error> {
12 current_txn(DEFAULT_DATA_SOURCE).await
13}
14
15pub async fn current_txn(name: &str) -> Result<Transaction, Error> {
16 let txn = data_sources()?
17 .get(name)
18 .context(NotFoundDataSourceSnafu { name })?
19 .current_txn()
20 .await?;
21
22 Ok(txn)
23}
24
25pub async fn create_txn(name: &str) -> Result<Transaction, Error> {
26 let txn = data_sources()?
27 .get(name)
28 .context(NotFoundDataSourceSnafu { name })?
29 .create_txn()
30 .await?;
31
32 Ok(txn)
33}
34
35pub async fn commit(txn: Transaction) -> Result<(), Error> {
36 let data_sources = data_sources()?;
37
38 let source = data_sources
39 .get(&txn.name)
40 .context(NotFoundDataSourceSnafu {
41 name: txn.name.as_ref(),
42 })?;
43
44 source.commit(txn).await
45}
46
47pub async fn rollback(txn: Transaction) -> Result<(), Error> {
48 let data_sources = data_sources()?;
49
50 let source = data_sources
51 .get(&txn.name)
52 .context(NotFoundDataSourceSnafu {
53 name: txn.name.as_ref(),
54 })?;
55
56 source.rollback(txn).await
57}
58
59pub fn data_sources() -> Result<Arc<DataSources>, Error> {
60 DATA_SOURCES
61 .try_with(Arc::clone)
62 .map_err(|_| NotSetDataSourcesSnafu.build())
63}