use axum_core::extract::FromRef;
use crate::Marker;
#[derive(Debug)]
pub struct State<DB: Marker> {
pool: sqlx::Pool<DB::Driver>,
}
impl<DB: Marker> State<DB> {
pub(crate) fn new(pool: sqlx::Pool<DB::Driver>) -> Self {
Self { pool }
}
pub(crate) async fn transaction(
&self,
) -> Result<sqlx::Transaction<'static, DB::Driver>, sqlx::Error> {
self.pool.begin().await
}
}
impl<DB: Marker> Clone for State<DB> {
fn clone(&self) -> Self {
Self {
pool: self.pool.clone(),
}
}
}
impl<DB: Marker> FromRef<State<DB>> for sqlx::Pool<DB::Driver> {
fn from_ref(input: &State<DB>) -> Self {
input.pool.clone()
}
}