diff --git a/gradle.properties b/gradle.properties index ebd229a..fcea9d7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ kotlin.code.style=official # project id projectGroupId=io.github.smiley4 projectArtifactIdBase=ktor-swagger-ui -projectVersion=3.2.0 +projectVersion=3.3.0 # publishing information projectNameBase=Ktor Swagger UI @@ -19,7 +19,7 @@ projectDeveloperUrl=https://github.com/SMILEY4 versionKtor=2.3.11 versionSwaggerUI=5.17.11 versionSwaggerParser=2.1.22 -versionSchemaKenerator=1.0.1 +versionSchemaKenerator=1.1.0 versionKotlinLogging=3.0.5 versionKotest=5.8.0 versionKotlinTest=1.8.21 diff --git a/ktor-swagger-ui-examples/src/main/kotlin/io/github/smiley4/ktorswaggerui/examples/CompleteConfig.kt b/ktor-swagger-ui-examples/src/main/kotlin/io/github/smiley4/ktorswaggerui/examples/CompleteConfig.kt index 78d776e..d9593e6 100644 --- a/ktor-swagger-ui-examples/src/main/kotlin/io/github/smiley4/ktorswaggerui/examples/CompleteConfig.kt +++ b/ktor-swagger-ui-examples/src/main/kotlin/io/github/smiley4/ktorswaggerui/examples/CompleteConfig.kt @@ -138,7 +138,7 @@ private fun Application.myModule() { specAssigner = { _, _ -> PluginConfigDsl.DEFAULT_SPEC_ID } pathFilter = { _, url -> url.firstOrNull() != "hidden" } ignoredRouteSelectors = emptySet() - postBuild = { api -> println("Completed api: $api") } + postBuild = { api, name -> println("Completed api '$name': $api") } } diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/SwaggerPlugin.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/SwaggerPlugin.kt index d6d6885..37c2125 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/SwaggerPlugin.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/SwaggerPlugin.kt @@ -30,7 +30,6 @@ import io.github.smiley4.ktorswaggerui.builder.route.RouteMeta import io.github.smiley4.ktorswaggerui.builder.schema.SchemaContext import io.github.smiley4.ktorswaggerui.builder.schema.SchemaContextImpl import io.github.smiley4.ktorswaggerui.data.PluginConfigData -import io.github.smiley4.ktorswaggerui.data.TypeDescriptor import io.github.smiley4.ktorswaggerui.dsl.config.PluginConfigDsl import io.github.smiley4.ktorswaggerui.routing.ApiSpec import io.ktor.server.application.Application @@ -83,12 +82,12 @@ private fun buildOpenApiSpecs(config: PluginConfigData, routes: List) return buildMap { routesBySpec.forEach { (specName, routes) -> val specConfig = config.specConfigs[specName] ?: config - this[specName] = buildOpenApiSpec(specConfig, routes) + this[specName] = buildOpenApiSpec(specName, specConfig, routes) } } } -private fun buildOpenApiSpec(pluginConfig: PluginConfigData, routes: List): String { +private fun buildOpenApiSpec(specName: String, pluginConfig: PluginConfigData, routes: List): String { return try { val schemaContext = SchemaContextImpl(pluginConfig.schemaConfig).also { it.addGlobal(pluginConfig.schemaConfig) @@ -99,7 +98,7 @@ private fun buildOpenApiSpec(pluginConfig: PluginConfigData, routes: List mergeDefault(base: T, value: T, default: T) = if (value != default) value else base + /** + * Merges the two values. + * @return "value" if "value" is not null, "base" otherwise + */ fun merge(base: T?, value: T?) = value ?: base } diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/data/PostBuild.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/data/PostBuild.kt index 5934a97..8c26751 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/data/PostBuild.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/data/PostBuild.kt @@ -6,4 +6,4 @@ import io.swagger.v3.oas.models.OpenAPI * Function executed after building the openapi-spec. * @author yuefeng in 2024/3/25. */ -typealias PostBuild = (openApi: OpenAPI) -> Unit +typealias PostBuild = (openApi: OpenAPI, specId: String) -> Unit diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/ExampleConfig.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/ExampleConfig.kt index 68ed186..59ddd3c 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/ExampleConfig.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/ExampleConfig.kt @@ -55,6 +55,10 @@ class ExampleConfig { this.exampleEncoder = exampleEncoder } + /** + * Build the data object for this config. + * @param securityConfig the data for security config that might contain additional examples + */ fun build(securityConfig: SecurityData) = ExampleConfigData( sharedExamples = sharedExamples, securityExamples = securityConfig.defaultUnauthorizedResponse?.body?.let { diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiContact.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiContact.kt index 3936ef6..b27b454 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiContact.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiContact.kt @@ -28,6 +28,10 @@ class OpenApiContact { var email: String? = ContactData.DEFAULT.email + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: ContactData) = ContactData( name = merge(base.name, name), url = merge(base.url, url), diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiExternalDocs.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiExternalDocs.kt index 6510081..c3c81b6 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiExternalDocs.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiExternalDocs.kt @@ -21,7 +21,10 @@ class OpenApiExternalDocs { */ var url: String = "/" - + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: ExternalDocsData) = ExternalDocsData( url = DataUtils.mergeDefault(base.url, url, ExternalDocsData.DEFAULT.url), description = DataUtils.merge(base.description, description) diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiInfo.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiInfo.kt index f78facd..9fe4c8d 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiInfo.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiInfo.kt @@ -62,7 +62,10 @@ class OpenApiInfo { license = OpenApiLicense().apply(block) } - + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: InfoData): InfoData { return InfoData( title = mergeDefault(base.title, this.title, InfoData.DEFAULT.title), diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiLicense.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiLicense.kt index 3d05b85..10b4040 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiLicense.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiLicense.kt @@ -27,6 +27,10 @@ class OpenApiLicense { */ var identifier: String? = LicenseData.DEFAULT.identifier + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: LicenseData) = LicenseData( name = DataUtils.merge(base.name, name), url = DataUtils.merge(base.url, url), diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiSecurity.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiSecurity.kt index 817e1c0..85ca765 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiSecurity.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiSecurity.kt @@ -52,6 +52,10 @@ class OpenApiSecurity { private val securitySchemes = mutableListOf() + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: SecurityData) = SecurityData( defaultUnauthorizedResponse = merge(base.defaultUnauthorizedResponse, defaultUnauthorizedResponse?.build()), defaultSecuritySchemeNames = buildSet { diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiSecurityScheme.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiSecurityScheme.kt index 83f8bf6..d7dfc11 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiSecurityScheme.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiSecurityScheme.kt @@ -75,7 +75,10 @@ class OpenApiSecurityScheme( */ var description: String? = null - + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: SecuritySchemeData) = SecuritySchemeData( schemeName = schemeName, type = merge(base.type, type), diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiServer.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiServer.kt index 5c667d6..fb12e4f 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiServer.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiServer.kt @@ -32,6 +32,10 @@ class OpenApiServer { variables[name] = OpenApiServerVariable(name).apply(block) } + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: ServerData) = ServerData( url = mergeDefault(base.url, url, ServerData.DEFAULT.url), description = merge(base.description, description), diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiServerVariable.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiServerVariable.kt index dd2fc39..bdd6495 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiServerVariable.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiServerVariable.kt @@ -31,6 +31,9 @@ class OpenApiServerVariable( */ var description: String? = null + /** + * Build the data object for this config. + */ fun build() = ServerVariableData( name = name, enum = enum.toSet(), diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiTags.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiTags.kt index 8d2928b..1d93ace 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiTags.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenApiTags.kt @@ -30,7 +30,10 @@ class OpenApiTags { */ var tagGenerator: TagGenerator = TagsData.DEFAULT.generator - + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: TagsData) = TagsData( tags = buildList { addAll(base.tags) diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenIdOAuthFlow.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenIdOAuthFlow.kt index d0d0664..7beaeb8 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenIdOAuthFlow.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenIdOAuthFlow.kt @@ -30,7 +30,10 @@ class OpenIdOAuthFlow { */ var scopes: Map? = null - + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: OpenIdOAuthFlowData) = OpenIdOAuthFlowData( authorizationUrl = merge(base.authorizationUrl, authorizationUrl), tokenUrl = merge(base.tokenUrl, tokenUrl), diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenIdOAuthFlows.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenIdOAuthFlows.kt index 5b21dca..122b64d 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenIdOAuthFlows.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/OpenIdOAuthFlows.kt @@ -53,7 +53,10 @@ class OpenIdOAuthFlows { authorizationCode = OpenIdOAuthFlow().apply(block) } - + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ fun build(base: OpenIdOAuthFlowsData) = OpenIdOAuthFlowsData( implicit = implicit?.build(base.implicit ?: OpenIdOAuthFlowData.DEFAULT) ?: base.implicit, password = password?.build(base.password ?: OpenIdOAuthFlowData.DEFAULT) ?: base.password, diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/PluginConfigDsl.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/PluginConfigDsl.kt index 1c46ec4..984e296 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/PluginConfigDsl.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/PluginConfigDsl.kt @@ -134,6 +134,10 @@ class PluginConfigDsl { var postBuild: PostBuild? = null + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ internal fun build(base: PluginConfigData): PluginConfigData { val securityConfig = security.build(base.securityConfig) return PluginConfigData( @@ -155,7 +159,7 @@ class PluginConfigDsl { addAll(ignoredRouteSelectors) }, specConfigs = mutableMapOf(), - postBuild = postBuild, + postBuild = merge(base.postBuild, postBuild), ).also { specConfigs.forEach { (specId, config) -> it.specConfigs[specId] = config.build(it) diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/SchemaConfig.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/SchemaConfig.kt index 18d23b0..1c80d9b 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/SchemaConfig.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/SchemaConfig.kt @@ -83,14 +83,18 @@ class SchemaConfig { */ inline fun schema(schemaId: String) = schema(schemaId, KTypeDescriptor(typeOf())) + /** + * Build the data object for this config. + * @param securityConfig configuration that might contain additional schemas + */ fun build(securityConfig: SecurityData) = SchemaConfigData( generator = generator, schemas = schemas, overwrite = overwrite, - securitySchemas = securityConfig.defaultUnauthorizedResponse?.body?.let { - when (it) { - is OpenApiSimpleBodyData -> listOf(it.type) - is OpenApiMultipartBodyData -> it.parts.map { it.type } + securitySchemas = securityConfig.defaultUnauthorizedResponse?.body?.let { body -> + when (body) { + is OpenApiSimpleBodyData -> listOf(body.type) + is OpenApiMultipartBodyData -> body.parts.map { it.type } } } ?: emptyList() ) diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/SwaggerUIDsl.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/SwaggerUIDsl.kt index 1aa4fe0..9237a0e 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/SwaggerUIDsl.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/config/SwaggerUIDsl.kt @@ -61,6 +61,10 @@ class SwaggerUIDsl { */ var withCredentials: Boolean = false + /** + * Build the data object for this config. + * @param base the base config to "inherit" from. Values from the base should be copied, replaced or merged together. + */ internal fun build(base: SwaggerUIData): SwaggerUIData { return SwaggerUIData( validatorUrl = merge(base.validatorUrl, this.validatorUrl), diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiBaseBody.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiBaseBody.kt index e118bee..05573cd 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiBaseBody.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiBaseBody.kt @@ -39,5 +39,8 @@ sealed class OpenApiBaseBody { this.mediaTypes = mediaTypes.toList() } + /** + * Build the data object for this config. + */ abstract fun build(): OpenApiBaseBodyData } diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiHeader.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiHeader.kt index 099214b..acb6170 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiHeader.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiHeader.kt @@ -70,6 +70,9 @@ class OpenApiHeader { */ var explode: Boolean? = null + /** + * Build the data object for this config. + */ fun build() = OpenApiHeaderData( description = description, type = type, diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiMultipartPart.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiMultipartPart.kt index 578319c..dabb849 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiMultipartPart.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiMultipartPart.kt @@ -77,7 +77,9 @@ class OpenApiMultipartPart( inline fun header(name: String, noinline block: OpenApiHeader.() -> Unit = {}) = header(name, KTypeDescriptor(typeOf()), block) - + /** + * Build the data object for this config. + */ fun build() = OpenApiMultipartPartData( name = name, type = type, diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRequest.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRequest.kt index 21a34a1..9d93cd1 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRequest.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRequest.kt @@ -163,6 +163,9 @@ class OpenApiRequest { this.body = body } + /** + * Build the data object for this config. + */ fun build() = OpenApiRequestData( parameters = parameters.map { it.build() }, body = body?.build() diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRequestParameter.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRequestParameter.kt index 41ce904..9b8423e 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRequestParameter.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRequestParameter.kt @@ -107,13 +107,16 @@ class OpenApiRequestParameter( */ var style: Parameter.StyleEnum? = null + /** + * Build the data object for this config. + */ fun build() = OpenApiRequestParameterData( name = name, type = type, location = location, description = description, example = example, - required = required ?: false, + required = required ?: (location == ParameterLocation.PATH), deprecated = deprecated ?: false, allowEmptyValue = allowEmptyValue ?: true, explode = explode ?: false, diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiResponse.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiResponse.kt index 5e0af62..24c8c91 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiResponse.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiResponse.kt @@ -88,7 +88,9 @@ class OpenApiResponse(val statusCode: String) { body = OpenApiMultipartBody().apply(block) } - + /** + * Build the data object for this config. + */ fun build() = OpenApiResponseData( statusCode = statusCode, description = description, diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRoute.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRoute.kt index 91b4db3..eec28d1 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRoute.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiRoute.kt @@ -149,7 +149,9 @@ class OpenApiRoute { private val servers = mutableListOf() - + /** + * Build the data object for this config. + */ fun build() = OpenApiRouteData( specId = specId, tags = tags.toSet(), diff --git a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiSimpleBody.kt b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiSimpleBody.kt index 517dc52..6cdc357 100644 --- a/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiSimpleBody.kt +++ b/ktor-swagger-ui/src/main/kotlin/io/github/smiley4/ktorswaggerui/dsl/routes/OpenApiSimpleBody.kt @@ -68,7 +68,6 @@ class OpenApiSimpleBody( */ fun exampleRef(name: String) = example(RefExampleDescriptor(name, name)) - override fun build() = OpenApiSimpleBodyData( description = description, required = required ?: false, diff --git a/ktor-swagger-ui/src/test/kotlin/io/github/smiley4/ktorswaggerui/builder/OperationBuilderTest.kt b/ktor-swagger-ui/src/test/kotlin/io/github/smiley4/ktorswaggerui/builder/OperationBuilderTest.kt index b674a3a..dca9b56 100644 --- a/ktor-swagger-ui/src/test/kotlin/io/github/smiley4/ktorswaggerui/builder/OperationBuilderTest.kt +++ b/ktor-swagger-ui/src/test/kotlin/io/github/smiley4/ktorswaggerui/builder/OperationBuilderTest.kt @@ -237,7 +237,7 @@ class OperationBuilderTest : StringSpec({ ?.also { param -> param.`in` shouldBe "path" param.description shouldBe null - param.required shouldBe false + param.required shouldBe true param.deprecated shouldBe false param.allowEmptyValue shouldBe true param.`$ref` shouldBe null