packageio.github.smiley4.ktoropenapi.examplesimportio.github.smiley4.ktoropenapi.OpenApiimportio.github.smiley4.ktoropenapi.config.SchemaGeneratorimportio.github.smiley4.ktoropenapi.getimportio.github.smiley4.ktoropenapi.openApiimportio.github.smiley4.ktorredoc.redocimportio.github.smiley4.ktorswaggerui.swaggerUIimportio.github.smiley4.schemakenerator.serialization.SerializationSteps.analyzeTypeUsingKotlinxSerializationimportio.github.smiley4.schemakenerator.swagger.SwaggerSteps.RequiredHandlingimportio.github.smiley4.schemakenerator.swagger.SwaggerSteps.compileReferencingRootimportio.github.smiley4.schemakenerator.swagger.SwaggerSteps.generateSwaggerSchemaimportio.github.smiley4.schemakenerator.swagger.SwaggerSteps.withTitleimportio.github.smiley4.schemakenerator.swagger.data.TitleTypeimportio.ktor.http.HttpStatusCodeimportio.ktor.server.application.Applicationimportio.ktor.server.application.installimportio.ktor.server.engine.embeddedServerimportio.ktor.server.netty.Nettyimportio.ktor.server.response.respondimportio.ktor.server.routing.routeimportio.ktor.server.routing.routingimportkotlinx.serialization.Serializablefunmain(){embeddedServer(Netty,port=8080,host="localhost",module=Application::myModule).start(wait=true)}privatefunApplication.myModule(){// Install and configure the OpenApi plugininstall(OpenApi){schemas{// replace default schema-generator with configurable pre-defined generator, or ...generator=SchemaGenerator.kotlinx{nullables=RequiredHandling.NON_REQUIREDoptionals=RequiredHandling.REQUIREDtitle=TitleType.SIMPLEexplicitNullTypes=false}// ... replace default schema-generator with completely custom generatorgenerator={type->type.analyzeTypeUsingKotlinxSerialization().generateSwaggerSchema{nullables=RequiredHandling.NON_REQUIREDoptionals=RequiredHandling.REQUIRED}.withTitle(TitleType.SIMPLE).compileReferencingRoot(explicitNullTypes=false)}}}routing{// add the routes for the OpenAPI spec, Swagger UI and ReDocroute("swagger"){swaggerUI("/api.json")}route("api.json"){openApi()}route("redoc"){redoc("/api.json")}// a documented routeget("hello",{// information about the requestresponse{// information about a "200 OK" responsecode(HttpStatusCode.OK){// body of the responsebody<MyResponseBody>()}}}){call.respond(HttpStatusCode.NotImplemented,"...")}}}@SerializableprivateclassMyResponseBody(valname:String,)