neon_wasi_http/
transaction_builder.rs1use serde::{Deserialize, Serialize};
2
3use crate::{Client, Query, TransactionResponse};
4use anyhow::Result;
5
6#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
7pub struct Transaction {
8 pub queries: Vec<Query>,
9}
10
11#[derive(Default)]
13pub struct TransactionBuilder {
14 queries: Vec<Query>,
15}
16
17impl TransactionBuilder {
18 pub fn new() -> Self {
19 Self::default()
20 }
21
22 pub fn add(mut self, query: Query) -> Self {
23 self.queries.push(query);
24 self
25 }
26
27 pub fn merge(mut self, mut transaction: Transaction) -> Self {
28 self.queries.append(&mut transaction.queries);
29 self
30 }
31
32 pub fn build(self) -> Transaction {
33 self.into()
34 }
35
36 pub async fn execute(self, connection: &Client) -> Result<()> {
37 connection.execute_transaction(self.build()).await
38 }
39
40 pub async fn execute_raw(self, connection: &Client) -> Result<TransactionResponse> {
41 connection.execute_transaction_raw(self.build()).await
42 }
43}
44
45impl From<TransactionBuilder> for Transaction {
46 fn from(value: TransactionBuilder) -> Self {
47 Self {
48 queries: value.queries,
49 }
50 }
51}