use quote::quote;
use super::super::super::parse::ServerDb;
type Ts = proc_macro2::TokenStream;
pub(super) fn build_state(db: ServerDb) -> Ts {
match db {
ServerDb::Postgres => quote! {
#[derive(Clone)]
pub struct ModelRouterState<C, Auth> {
pub db: super::Cratestack,
pub codec: C,
pub auth_provider: Auth,
}
},
ServerDb::None => Ts::new(),
}
}
pub(super) fn build_fn(db: ServerDb, model_axum_routes: &[Ts]) -> Ts {
match db {
ServerDb::Postgres => quote! {
pub fn model_router<C, Auth>(
db: super::Cratestack,
codec: C,
auth_provider: Auth,
) -> axum::Router
where
C: HttpTransport,
Auth: AuthProvider,
{
let state = ModelRouterState {
db,
codec,
auth_provider,
};
axum::Router::new()
#(#model_axum_routes)*
.layer(::cratestack::axum::middleware::from_fn_with_state(
super::SCHEMA_SHA256,
::cratestack::schema_fingerprint::warn_on_schema_mismatch,
))
.with_state(state)
}
},
ServerDb::None => Ts::new(),
}
}