Skip to main content

db_http_core/
transaction_builder.rs

1use crate::backend::DatabaseBackend;
2use crate::error::Error;
3use crate::types::{Query, QueryResult, Transaction};
4
5pub struct TransactionBuilder<B: DatabaseBackend> {
6    backend: B,
7    queries: Vec<Query>,
8}
9
10impl<B: DatabaseBackend> TransactionBuilder<B> {
11    pub fn new(backend: B) -> Self {
12        Self {
13            backend,
14            queries: Vec::new(),
15        }
16    }
17
18    pub fn add(mut self, query: Query) -> Self {
19        self.queries.push(query);
20        self
21    }
22
23    pub fn merge(mut self, transaction: Transaction) -> Self {
24        self.queries.extend(transaction.queries);
25        self
26    }
27
28    pub fn build(self) -> Transaction {
29        Transaction {
30            queries: self.queries,
31        }
32    }
33
34    pub async fn execute(self) -> Result<Vec<QueryResult>, Error> {
35        let transaction = Transaction {
36            queries: self.queries,
37        };
38        self.backend.execute_transaction(&transaction).await
39    }
40}