use axum::{ Router, routing::{get, post}, }; use std::sync::Arc; use utoipa::OpenApi; use utoipa_swagger_ui::SwaggerUi; use crate::Datasets; mod lookup; pub use lookup::*; mod item; pub use item::*; mod field; pub use field::*; #[derive(OpenApi)] #[openapi( tags(), paths(lookup, item_get, get_field), components(schemas(LookupRequest, LookupResponse, LookupResult, ItemQuery, FieldQuery)) )] pub(crate) struct Api; impl Datasets { #[inline] pub fn router(self: Arc, with_docs: bool) -> Router<()> { let mut router = Router::new() .route("/lookup", post(lookup)) .route("/item", get(item_get)) .route("/field", get(get_field)) .with_state(self.clone()); if with_docs { let docs_path = "/docs"; let docs = SwaggerUi::new(docs_path) .url(format!("{}/openapi.json", docs_path), Api::openapi()); router = router.merge(docs); } router } }