1use std::marker::PhantomData;
2
3use crate::{Layer, Marker, State};
4
5pub struct Config<DB: Marker, LayerError> {
20 pool: sqlx::Pool<DB::Driver>,
21 _layer_error: PhantomData<LayerError>,
22}
23
24impl<DB: Marker, LayerError> Config<DB, LayerError>
25where
26 LayerError: axum_core::response::IntoResponse,
27 sqlx::Error: Into<LayerError>,
28{
29 pub(crate) fn new(pool: sqlx::Pool<DB::Driver>) -> Self {
30 Self {
31 pool,
32 _layer_error: PhantomData,
33 }
34 }
35
36 pub fn layer_error<E>(self) -> Config<DB, E>
38 where
39 sqlx::Error: Into<E>,
40 {
41 Config {
42 pool: self.pool,
43 _layer_error: PhantomData,
44 }
45 }
46
47 pub fn setup(self) -> (State<DB>, Layer<DB, LayerError>) {
49 let state = State::new(self.pool);
50 let layer = Layer::new(state.clone());
51 (state, layer)
52 }
53}