cargagep-v2/src/api/docs.rs
Antoine Pelletier 7e958b89c6 feat: add oidc
2026-08-23 22:20:27 +02:00

49 lines
1.4 KiB
Rust

//! OpenAPI document + Scalar viewer, served on `/api/docs`.
//! The frontend types are generated from `/api/docs/private/api.json`
//! (`npm run openapi` in `frontend/`).
use std::sync::Arc;
use aide::{
axum::{ApiRouter, IntoApiResponse},
openapi::{OpenApi, Server, Tag},
scalar::Scalar,
transform::TransformOpenApi,
};
use axum::{Extension, Json, response::IntoResponse, routing::get};
pub fn api_docs_metadata(api: TransformOpenApi) -> TransformOpenApi {
api.title(&format!("{} API documentation", env!("CRATE_NAME")))
.description(format!("Build version: {}", env!("GIT_HASH")).as_str())
.tag(Tag {
name: "Auth".to_owned(),
..Default::default()
})
.tag(Tag {
name: "Bikes".to_owned(),
..Default::default()
})
.tag(Tag {
name: "misc".to_owned(),
..Default::default()
})
.server(Server {
url: "/".to_owned(),
..Default::default()
})
}
pub fn routes() -> ApiRouter {
ApiRouter::new()
.route(
"/",
get(Scalar::new("/api/docs/private/api.json")
.with_title(env!("CRATE_NAME"))
.axum_handler()),
)
.route("/private/api.json", get(serve_docs))
}
async fn serve_docs(Extension(api): Extension<Arc<OpenApi>>) -> impl IntoApiResponse {
Json(api).into_response()
}