use utoipa::{ Modify, OpenApi, openapi::security::{HttpAuthScheme, HttpBuilder, SecurityScheme}, }; use crate::ErrorResponse; pub mod tags { pub const ACCOUNT: &str = "Account"; pub const QUEUE: &str = "Queue"; } struct AuthModifier; impl Modify for AuthModifier { fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) { if let Some(components) = openapi.components.as_mut() { components.add_security_scheme( "auth", SecurityScheme::Http( HttpBuilder::new() .scheme(HttpAuthScheme::Bearer) .bearer_format("JWT") .build(), ), ) } } } #[derive(OpenApi)] #[openapi( info( title = "ITMO queue server API", description = "Queuing service for labs works", license( name = "AGPL-3.0", url="https://www.gnu.org/licenses/agpl-3.0.en.html#license-text" ), ), servers( ( url = "http://{host}:{port}/", description = "Local server", variables( ("host" = (default = "localhost", description="Server host")), ("port" = (default = "8888", description="Server port")) ) ), (url = "https://очередь.псж.онлайн/api/v1/", description = "Production server"), ), tags( (name=tags::ACCOUNT, description="Account management methods") ), components( schemas(ErrorResponse) ), modifiers(&AuthModifier) )] pub struct AppOpenApi;