use silent::prelude::*;
use silent_openapi::{OpenApiDoc, RouteOpenApiExt, SwaggerUiHandler};
#[tokio::main]
async fn main() -> silent::Result<()> {
async fn protected(_req: Request) -> silent::Result<Response> {
Ok(Response::text("ok"))
}
let route = Route::new("api").append(Route::new("protected").get(protected));
let openapi = route.to_openapi("Secure API", "1.0.0");
let openapi = OpenApiDoc::from_openapi(openapi)
.add_bearer_auth("bearerAuth", Some("JWT Bearer token"))
.set_global_security("bearerAuth", &[])
.into_openapi();
let swagger = SwaggerUiHandler::new("/docs", openapi).expect("create swagger ui");
let app = Route::new("")
.append(
Route::new("docs")
.insert_handler(silent::Method::GET, std::sync::Arc::new(swagger.clone()))
.insert_handler(silent::Method::HEAD, std::sync::Arc::new(swagger.clone())),
)
.append(
Route::new("docs/<path:**>")
.insert_handler(silent::Method::GET, std::sync::Arc::new(swagger.clone()))
.insert_handler(silent::Method::HEAD, std::sync::Arc::new(swagger)),
)
.append(route);
let addr = "127.0.0.1:8080".parse().expect("Invalid address");
Server::new().bind(addr).serve(app).await;
Ok(())
}