sql_middleware/typed/
traits.rs

1//! Core traits for typed database connections.
2
3use crate::SqlMiddlewareDbError;
4use crate::{middleware::RowValues, query_builder::QueryBuilder, results::ResultSet};
5
6/// Minimal query surface shared by idle and tx connections.
7pub trait Queryable {
8    fn query<'a>(&'a mut self, sql: &'a str) -> QueryBuilder<'a, 'a>;
9}
10
11/// Shared operations available in both idle and transactional typed connections.
12pub trait TypedConnOps: Queryable {
13    #[allow(clippy::manual_async_fn)]
14    fn execute_batch(
15        &mut self,
16        sql: &str,
17    ) -> impl std::future::Future<Output = Result<(), SqlMiddlewareDbError>>;
18
19    #[allow(clippy::manual_async_fn)]
20    fn dml(
21        &mut self,
22        query: &str,
23        params: &[RowValues],
24    ) -> impl std::future::Future<Output = Result<usize, SqlMiddlewareDbError>>;
25
26    #[allow(clippy::manual_async_fn)]
27    fn select(
28        &mut self,
29        query: &str,
30        params: &[RowValues],
31    ) -> impl std::future::Future<Output = Result<ResultSet, SqlMiddlewareDbError>>;
32}
33
34/// Begin a transaction from an idle connection.
35pub trait BeginTx: Sized {
36    type Tx: TxConn<Idle = Self>;
37
38    #[allow(clippy::manual_async_fn)]
39    fn begin(self) -> impl std::future::Future<Output = Result<Self::Tx, SqlMiddlewareDbError>>;
40}
41
42/// Transaction state that can return to idle.
43pub trait TxConn {
44    type Idle;
45
46    #[allow(clippy::manual_async_fn)]
47    fn commit(self) -> impl std::future::Future<Output = Result<Self::Idle, SqlMiddlewareDbError>>;
48    #[allow(clippy::manual_async_fn)]
49    fn rollback(
50        self,
51    ) -> impl std::future::Future<Output = Result<Self::Idle, SqlMiddlewareDbError>>;
52}