11package io.github.smiley4.ktorswaggerui
22
3- import io.github.smiley4.ktorswaggerui.specbuilder.ApiSpecBuilder
4- import io.ktor.server.application.ApplicationStarted
5- import io.ktor.server.application.createApplicationPlugin
6- import io.ktor.server.application.hooks.MonitoringEvent
7- import io.ktor.server.application.install
8- import io.ktor.server.application.pluginOrNull
9- import io.ktor.server.webjars.Webjars
3+ import io.github.smiley4.ktorswaggerui.spec.openapi.*
4+ import io.github.smiley4.ktorswaggerui.spec.route.RouteCollector
5+ import io.github.smiley4.ktorswaggerui.spec.route.RouteDocumentationMerger
6+ import io.github.smiley4.ktorswaggerui.spec.route.RouteMeta
7+ import io.github.smiley4.ktorswaggerui.spec.schema.SchemaBuilder
8+ import io.github.smiley4.ktorswaggerui.spec.schema.SchemaContext
9+ import io.github.smiley4.ktorswaggerui.spec.schema.SchemaContextBuilder
10+ import io.ktor.server.application.*
11+ import io.ktor.server.application.hooks.*
12+ import io.ktor.server.routing.*
13+ import io.ktor.server.webjars.*
14+ import io.swagger.v3.core.util.Json
1015
1116/* *
1217 * This version must match the version of the gradle dependency
@@ -21,7 +26,9 @@ val SwaggerUI = createApplicationPlugin(name = "SwaggerUI", createConfiguration
2126 if (application.pluginOrNull(Webjars ) == null ) {
2227 application.install(Webjars )
2328 }
24- apiSpecJson = ApiSpecBuilder ().build(application, pluginConfig)
29+ val routes = routes(application, pluginConfig)
30+ val schemaContext = schemaContext(pluginConfig, routes)
31+ apiSpecJson = Json .pretty(builder(pluginConfig, schemaContext).build(routes))
2532 }
2633
2734 SwaggerRouting (
@@ -31,3 +38,101 @@ val SwaggerUI = createApplicationPlugin(name = "SwaggerUI", createConfiguration
3138 ) { apiSpecJson }.setup(application)
3239
3340}
41+
42+ private fun routes (application : Application , pluginConfig : SwaggerUIPluginConfig ): List <RouteMeta > {
43+ return RouteCollector (RouteDocumentationMerger ())
44+ .collectRoutes({ application.plugin(Routing ) }, pluginConfig)
45+ .toList()
46+ }
47+
48+ private fun schemaContext (pluginConfig : SwaggerUIPluginConfig , routes : List <RouteMeta >): SchemaContext {
49+ return SchemaContextBuilder (
50+ config = pluginConfig,
51+ schemaBuilder = SchemaBuilder (
52+ definitionsField = pluginConfig.encodingConfig.schemaDefinitionsField,
53+ schemaEncoder = pluginConfig.encodingConfig.getSchemaEncoder()
54+ ),
55+ ).build(routes.toList())
56+ }
57+
58+ private fun builder (config : SwaggerUIPluginConfig , schemaContext : SchemaContext ): OpenApiBuilder {
59+ return OpenApiBuilder (
60+ config = config,
61+ schemaContext = schemaContext,
62+ infoBuilder = InfoBuilder (
63+ contactBuilder = ContactBuilder (),
64+ licenseBuilder = LicenseBuilder ()
65+ ),
66+ serverBuilder = ServerBuilder (),
67+ tagBuilder = TagBuilder (
68+ externalDocumentationBuilder = ExternalDocumentationBuilder ()
69+ ),
70+ pathsBuilder = PathsBuilder (
71+ pathBuilder = PathBuilder (
72+ operationBuilder = OperationBuilder (
73+ operationTagsBuilder = OperationTagsBuilder (config),
74+ parameterBuilder = ParameterBuilder (schemaContext),
75+ requestBodyBuilder = RequestBodyBuilder (
76+ contentBuilder = ContentBuilder (
77+ schemaContext = schemaContext,
78+ exampleBuilder = ExampleBuilder (
79+ config = config
80+ ),
81+ headerBuilder = HeaderBuilder (schemaContext)
82+ )
83+ ),
84+ responsesBuilder = ResponsesBuilder (
85+ responseBuilder = ResponseBuilder (
86+ headerBuilder = HeaderBuilder (schemaContext),
87+ contentBuilder = ContentBuilder (
88+ schemaContext = schemaContext,
89+ exampleBuilder = ExampleBuilder (
90+ config = config
91+ ),
92+ headerBuilder = HeaderBuilder (schemaContext)
93+ )
94+ ),
95+ config = config
96+ ),
97+ securityRequirementsBuilder = SecurityRequirementsBuilder (config),
98+ )
99+ )
100+ ),
101+ componentsBuilder = ComponentsBuilder (
102+ config = config,
103+ securitySchemesBuilder = SecuritySchemesBuilder (
104+ oAuthFlowsBuilder = OAuthFlowsBuilder ()
105+ )
106+ )
107+ )
108+ }
109+
110+
111+
112+
113+
114+
115+
116+
117+
118+
119+
120+
121+
122+
123+
124+
125+
126+
127+
128+
129+
130+
131+
132+
133+
134+
135+
136+
137+
138+
0 commit comments