1use axum_core::extract::FromRef;
2
3use crate::Marker;
4
5#[derive(Debug)]
16pub struct State<DB: Marker> {
17 pool: sqlx::Pool<DB::Driver>,
18}
19
20impl<DB: Marker> State<DB> {
21 pub(crate) fn new(pool: sqlx::Pool<DB::Driver>) -> Self {
22 Self { pool }
23 }
24
25 pub(crate) async fn transaction(
26 &self,
27 ) -> Result<sqlx::Transaction<'static, DB::Driver>, sqlx::Error> {
28 self.pool.begin().await
29 }
30}
31
32impl<DB: Marker> Clone for State<DB> {
33 fn clone(&self) -> Self {
34 Self {
35 pool: self.pool.clone(),
36 }
37 }
38}
39
40impl<DB: Marker> FromRef<State<DB>> for sqlx::Pool<DB::Driver> {
41 fn from_ref(input: &State<DB>) -> Self {
42 input.pool.clone()
43 }
44}