diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs index 0151c47..595723a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,14 @@ use dotenv::dotenv; use std::env; use std::sync::Arc; +use utoipa::{ + openapi::security::{HttpAuthScheme, HttpBuilder, SecurityScheme}, + Modify, OpenApi, ToSchema, +}; + +use utoipa_swagger_ui::SwaggerUi; +use database::artist::Artist; + #[derive(Clone)] struct AppState { database: Arc<database::DatabaseWrapper>, @@ -40,11 +48,47 @@ async fn main() -> std::io::Result<()> { secret: jwt_secret, }; + /* utoipa setup */ + #[derive(OpenApi)] + #[openapi( + paths( + ), + components( + schemas( + Artist + ) + ), + modifiers(&SecurityAddon) + )] + struct ApiDoc; + + struct SecurityAddon; + impl Modify for SecurityAddon { + fn modify(&self, openapi : &mut utoipa::openapi::OpenApi) { + let components = openapi.components.as_mut().unwrap(); + components.add_security_scheme( + "bearer_auth", + SecurityScheme::Http( + HttpBuilder::new() + .scheme(HttpAuthScheme::Bearer) + .bearer_format("JWT") + .build() + ), + ); + } + } + + let openapi = ApiDoc::openapi(); + /* main server setup */ HttpServer::new(move || { App::new() .app_data(web::Data::new(app_state.clone())) .route("/", web::get().to(root)) + .service(SwaggerUi::new("/docs/{_:.*}").url( + "/docs/openapi.json", + openapi.clone(), + )) .service(api::api_scope()) .service(auth::auth_scope()) }) |