aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorTolmachev Igor <me@igorek.dev>2025-09-14 23:27:25 +0300
committerTolmachev Igor <me@igorek.dev>2025-09-14 23:27:25 +0300
commit955598dce9aeb5626654c72b0ef94850123fa8ac (patch)
tree4fb161c2e67fdc161ebbca5ced271b6e7724dc30 /src/main.rs
parent39bf8397949ea2738ac3dfc934fcc3f07a6b0b66 (diff)
downloadqueue_server-955598dce9aeb5626654c72b0ef94850123fa8ac.tar.gz
queue_server-955598dce9aeb5626654c72b0ef94850123fa8ac.zip
Add openapi specs and docs
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs11
1 files changed, 8 insertions, 3 deletions
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 @@
1mod api;
1mod auth; 2mod auth;
2mod error; 3mod error;
3mod extract; 4mod extract;
@@ -5,9 +6,10 @@ mod response;
5mod routers; 6mod routers;
6mod state; 7mod state;
7 8
9pub use api::{AppOpenApi, tags};
8pub use auth::{JwtClaims, create_jwt, create_password, validate_jwt, validate_password}; 10pub use auth::{JwtClaims, create_jwt, create_password, validate_jwt, validate_password};
9pub use error::{ApiError, ApiResult}; 11pub use error::{ApiError, ClientError, ServerError};
10pub use response::{ErrorResponse, FailResponse, SuccessResponse}; 12pub use response::{ApiResult, ErrorResponse, GlobalResponses, SuccessResponse};
11pub use state::AppState; 13pub use state::AppState;
12 14
13use axum::Router; 15use axum::Router;
@@ -16,6 +18,7 @@ use tokio::net::TcpListener;
16use tower_http::trace::TraceLayer; 18use tower_http::trace::TraceLayer;
17use tracing::info; 19use tracing::info;
18use tracing_subscriber::EnvFilter; 20use tracing_subscriber::EnvFilter;
21use utoipa_scalar::{Scalar, Servable};
19 22
20fn env(name: &str) -> String { 23fn env(name: &str) -> String {
21 std::env::var(name).expect(format!("{} must be set", name).as_str()) 24 std::env::var(name).expect(format!("{} must be set", name).as_str())
@@ -28,10 +31,12 @@ async fn listener() -> TcpListener {
28async fn router() -> Router { 31async fn router() -> Router {
29 let db = Database::connect(env("DATABASE_URL")).await.unwrap(); 32 let db = Database::connect(env("DATABASE_URL")).await.unwrap();
30 let secret = env("SECRET"); 33 let secret = env("SECRET");
34 let (router, api) = routers::router().split_for_parts();
31 35
32 routers::router() 36 router
33 .layer(TraceLayer::new_for_http()) 37 .layer(TraceLayer::new_for_http())
34 .with_state(AppState { db, secret }) 38 .with_state(AppState { db, secret })
39 .merge(Scalar::with_url("/docs", api))
35} 40}
36 41
37#[tokio::main] 42#[tokio::main]