1pub mod auth;
2pub mod config;
3pub mod error;
4pub mod locks;
5pub mod metrics;
6pub mod model;
7pub mod namespace;
8pub mod routes;
9pub mod state;
10pub mod storage;
11
12use std::sync::Arc;
13
14use axum::Router;
15
16use crate::auth::Authorizer;
17use crate::config::Config;
18use crate::locks::LockStore;
19use crate::metrics::Metrics;
20use crate::state::AppState;
21use crate::storage::LocalStore;
22
23pub fn app(config: Config) -> Router {
24 let store = LocalStore::new(config.storage_root.clone());
25 let locks = LockStore::new(config.storage_root.clone());
26 let authorizer = Authorizer::new(&config.auth);
27
28 routes::router(Arc::new(AppState {
29 store,
30 locks,
31 config,
32 authorizer,
33 metrics: Metrics::new(),
34 }))
35}