use std::marker::PhantomData;
use crate::{Layer, Marker, State};
pub struct Config<DB: Marker, LayerError> {
pool: sqlx::Pool<DB::Driver>,
_layer_error: PhantomData<LayerError>,
}
impl<DB: Marker, LayerError> Config<DB, LayerError>
where
LayerError: axum_core::response::IntoResponse,
sqlx::Error: Into<LayerError>,
{
pub(crate) fn new(pool: sqlx::Pool<DB::Driver>) -> Self {
Self {
pool,
_layer_error: PhantomData,
}
}
pub fn layer_error<E>(self) -> Config<DB, E>
where
sqlx::Error: Into<E>,
{
Config {
pool: self.pool,
_layer_error: PhantomData,
}
}
pub fn setup(self) -> (State<DB>, Layer<DB, LayerError>) {
let state = State::new(self.pool);
let layer = Layer::new(state.clone());
(state, layer)
}
}