aiclient_api/server/
mod.rs1pub mod middleware;
2pub mod state;
3
4use axum::middleware as axum_mw;
5use axum::Router;
6use state::AppState;
7use tower_http::catch_panic::CatchPanicLayer;
8
9pub fn build_router(state: AppState) -> Router {
10 use axum::routing::{delete, get, post};
11
12 let v1_routes = Router::new()
14 .route("/chat/completions", post(crate::routes::openai::chat_completions))
15 .route("/models", get(crate::routes::openai::list_models))
16 .route("/messages", post(crate::routes::anthropic::messages))
17 .route("/usage", get(crate::routes::usage::get_usage))
18 .route("/usage", delete(crate::routes::usage::reset_usage))
19 .layer(axum_mw::from_fn_with_state(state.clone(), middleware::auth))
20 .layer(axum_mw::from_fn_with_state(state.clone(), middleware::rate_limit));
21
22 Router::new()
23 .route("/healthz", get(crate::routes::health::healthz))
24 .nest("/v1", v1_routes)
25 .layer(CatchPanicLayer::new())
26 .layer(middleware::cors_layer())
27 .with_state(state)
28}