db_http_core/
transaction_builder.rs1use 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}