summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs44
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())
})