diff options
Diffstat (limited to 'crates/sellershut/src/server.rs')
| -rw-r--r-- | crates/sellershut/src/server.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/crates/sellershut/src/server.rs b/crates/sellershut/src/server.rs new file mode 100644 index 0000000..cee6146 --- /dev/null +++ b/crates/sellershut/src/server.rs @@ -0,0 +1,42 @@ +mod doc; +mod middleware; +mod routes; + +use axum::Router; +use utoipa::OpenApi as _; +use utoipa_axum::{router::OpenApiRouter, routes}; + +#[cfg(feature = "redoc")] +use utoipa_redoc::Servable as _; +#[cfg(feature = "scalar")] +use utoipa_scalar::Servable as _; + +use crate::{config::Cli, server::doc::ApiDoc}; + +pub fn router(config: &Cli) -> Router { + let (router, _api) = OpenApiRouter::with_openapi(ApiDoc::openapi()) + .routes(routes!(routes::health_check)) + .split_for_parts(); + + #[cfg(feature = "swagger-ui")] + let router = router.merge( + utoipa_swagger_ui::SwaggerUi::new("/swagger-ui") + .url("/api-docs/swaggerdoc.json", _api.clone()), + ); + + #[cfg(feature = "redoc")] + let router = router.merge(utoipa_redoc::Redoc::with_url("/redoc", _api.clone())); + + #[cfg(feature = "rapidoc")] + let router = router.merge( + utoipa_rapidoc::RapiDoc::with_openapi("/api-docs/rapidoc.json", _api.clone()) + .path("/rapidoc"), + ); + + #[cfg(feature = "scalar")] + let router = router.merge(utoipa_scalar::Scalar::with_url("/scalar", _api)); + + let router = middleware::timeout::apply(router, config.timeout_duration); + + middleware::request_id::apply(router) +} |
