54 lines
1.2 KiB
Rust
54 lines
1.2 KiB
Rust
mod api;
|
|
mod view;
|
|
|
|
pub use self::api::ApiDoc;
|
|
|
|
use std::sync::Arc;
|
|
|
|
use axum::{Extension, Router};
|
|
use migration::sea_orm::DatabaseConnection;
|
|
|
|
use crate::{middlewares, services::settings::SettingsStore};
|
|
|
|
#[derive(Clone)]
|
|
pub struct AppState {
|
|
// TODO: remove dead_code allowances when fields are used
|
|
#[allow(dead_code)]
|
|
pub database_connection: Arc<DatabaseConnection>,
|
|
// TODO: remove dead_code allowances when fields are used
|
|
#[allow(dead_code)]
|
|
pub service: Arc<AppService>,
|
|
}
|
|
|
|
pub type ServiceState<T> = Arc<T>;
|
|
|
|
pub struct AppService {
|
|
#[allow(dead_code)] // TODO: remove when used
|
|
pub settings: ServiceState<dyn SettingsStore>,
|
|
}
|
|
|
|
pub fn get_root_router(state: impl Into<Arc<AppState>>) -> Router {
|
|
let mut router = Router::new();
|
|
|
|
router = router
|
|
.nest("/api", api::get_api_router())
|
|
.merge(view::get_view_router());
|
|
|
|
router = middlewares::apply_root_middleware(router);
|
|
|
|
router = router.layer(Extension(state.into()));
|
|
|
|
router
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn ensure_state_send_sync() {
|
|
fn assert_send_sync<T: Send + Sync>() {}
|
|
assert_send_sync::<AppState>();
|
|
}
|
|
}
|