From 955598dce9aeb5626654c72b0ef94850123fa8ac Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Sun, 14 Sep 2025 23:27:25 +0300 Subject: Add openapi specs and docs --- src/main.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 4ab5aeb..fe2589a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +mod api; mod auth; mod error; mod extract; @@ -5,9 +6,10 @@ mod response; mod routers; mod state; +pub use api::{AppOpenApi, tags}; pub use auth::{JwtClaims, create_jwt, create_password, validate_jwt, validate_password}; -pub use error::{ApiError, ApiResult}; -pub use response::{ErrorResponse, FailResponse, SuccessResponse}; +pub use error::{ApiError, ClientError, ServerError}; +pub use response::{ApiResult, ErrorResponse, GlobalResponses, SuccessResponse}; pub use state::AppState; use axum::Router; @@ -16,6 +18,7 @@ use tokio::net::TcpListener; use tower_http::trace::TraceLayer; use tracing::info; use tracing_subscriber::EnvFilter; +use utoipa_scalar::{Scalar, Servable}; fn env(name: &str) -> String { std::env::var(name).expect(format!("{} must be set", name).as_str()) @@ -28,10 +31,12 @@ async fn listener() -> TcpListener { async fn router() -> Router { let db = Database::connect(env("DATABASE_URL")).await.unwrap(); let secret = env("SECRET"); + let (router, api) = routers::router().split_for_parts(); - routers::router() + router .layer(TraceLayer::new_for_http()) .with_state(AppState { db, secret }) + .merge(Scalar::with_url("/docs", api)) } #[tokio::main] -- cgit v1.2.3