sql-middleware 0.7.0

Lightweight async wrappers for tokio-postgres, rusqlite, turso, and tiberius.
Documentation
macro_rules! impl_typed_backend {
    ($conn:ident, $idle:ty, $intx:ty) => {
        impl Queryable for $conn<$idle> {
            fn query<'a>(&'a mut self, sql: &'a str) -> QueryBuilder<'a, 'a> {
                self.query(sql)
            }
        }

        impl Queryable for $conn<$intx> {
            fn query<'a>(&'a mut self, sql: &'a str) -> QueryBuilder<'a, 'a> {
                self.query(sql)
            }
        }

        impl TypedConnOps for $conn<$idle> {
            #[allow(clippy::manual_async_fn)]
            fn execute_batch(
                &mut self,
                sql: &str,
            ) -> impl std::future::Future<Output = Result<(), SqlMiddlewareDbError>> {
                async move { self.execute_batch(sql).await }
            }

            #[allow(clippy::manual_async_fn)]
            fn dml(
                &mut self,
                query: &str,
                params: &[RowValues],
            ) -> impl std::future::Future<Output = Result<usize, SqlMiddlewareDbError>> {
                async move { self.dml(query, params).await }
            }

            #[allow(clippy::manual_async_fn)]
            fn select(
                &mut self,
                query: &str,
                params: &[RowValues],
            ) -> impl std::future::Future<Output = Result<ResultSet, SqlMiddlewareDbError>> {
                async move { self.select(query, params).await }
            }
        }

        impl TypedConnOps for $conn<$intx> {
            #[allow(clippy::manual_async_fn)]
            fn execute_batch(
                &mut self,
                sql: &str,
            ) -> impl std::future::Future<Output = Result<(), SqlMiddlewareDbError>> {
                async move { self.execute_batch(sql).await }
            }

            #[allow(clippy::manual_async_fn)]
            fn dml(
                &mut self,
                query: &str,
                params: &[RowValues],
            ) -> impl std::future::Future<Output = Result<usize, SqlMiddlewareDbError>> {
                async move { self.dml(query, params).await }
            }

            #[allow(clippy::manual_async_fn)]
            fn select(
                &mut self,
                query: &str,
                params: &[RowValues],
            ) -> impl std::future::Future<Output = Result<ResultSet, SqlMiddlewareDbError>> {
                async move { self.select(query, params).await }
            }
        }

        impl BeginTx for $conn<$idle> {
            type Tx = $conn<$intx>;

            #[allow(clippy::manual_async_fn)]
            fn begin(
                self,
            ) -> impl std::future::Future<Output = Result<Self::Tx, SqlMiddlewareDbError>> {
                async move { self.begin().await }
            }
        }

        impl TxConn for $conn<$intx> {
            type Idle = $conn<$idle>;

            #[allow(clippy::manual_async_fn)]
            fn commit(
                self,
            ) -> impl std::future::Future<Output = Result<Self::Idle, SqlMiddlewareDbError>> {
                async move { self.commit().await }
            }

            #[allow(clippy::manual_async_fn)]
            fn rollback(
                self,
            ) -> impl std::future::Future<Output = Result<Self::Idle, SqlMiddlewareDbError>> {
                async move { self.rollback().await }
            }
        }
    };
}

pub(crate) use impl_typed_backend;