Skip to content

Commit c068a2f

Browse files
committed
Merge branch 'fix-bugs-auto-protected-detection-schema-kenerator' into release
2 parents e90a0be + 0179347 commit c068a2f

File tree

4 files changed

+22
-3
lines changed

4 files changed

+22
-3
lines changed

examples/src/main/kotlin/io/github/smiley4/ktoropenapi/examples/KotlinxSerialization.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@file:OptIn(ExperimentalSerializationApi::class)
2+
13
package io.github.smiley4.ktoropenapi.examples
24

35
import io.github.smiley4.ktoropenapi.OpenApi
@@ -15,8 +17,10 @@ import io.ktor.server.netty.Netty
1517
import io.ktor.server.response.respondText
1618
import io.ktor.server.routing.route
1719
import io.ktor.server.routing.routing
20+
import kotlinx.serialization.ExperimentalSerializationApi
1821
import kotlinx.serialization.Serializable
1922
import kotlinx.serialization.json.Json
23+
import kotlinx.serialization.json.JsonNamingStrategy
2024

2125
fun main() {
2226
embeddedServer(Netty, port = 8080, host = "localhost", module = Application::myModule).start(wait = true)
@@ -28,6 +32,7 @@ private fun Application.myModule() {
2832
prettyPrint = true
2933
encodeDefaults = true
3034
explicitNulls = false
35+
namingStrategy = JsonNamingStrategy.SnakeCase
3136
}
3237

3338
install(OpenApi) {

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ kotlin.code.style=official
22

33
# project id
44
projectGroupId=io.github.smiley4
5-
projectVersion=5.0.0
5+
projectVersion=5.0.1
66

77
# common publishing information
88
projectBaseScmUrl=https://github.com/SMILEY4/
@@ -16,7 +16,7 @@ projectDeveloperUrl=https://github.com/SMILEY4
1616
versionKtor=3.1.1
1717
versionSwaggerUI=5.17.14
1818
versionSwaggerParser=2.1.24
19-
versionSchemaKenerator=2.1.0
19+
versionSchemaKenerator=2.1.1
2020
versionKotlinLogging=7.0.0
2121
versionKotest=5.8.0
2222
versionKotlinTest=2.0.21

ktor-openapi/src/main/kotlin/io/github/smiley4/ktoropenapi/builder/route/RouteCollector.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ internal class RouteCollector {
116116
private fun isProtected(route: RoutingNode): Boolean {
117117
return when (route.selector) {
118118
is AuthenticationRouteSelector -> true
119-
is TrailingSlashRouteSelector -> false
120119
is RootRouteSelector -> false
121120
is DocumentedRouteSelector -> route.parent?.let { isProtected(it) } ?: false
122121
is HttpMethodRouteSelector -> route.parent?.let { isProtected(it) } ?: false

ktor-openapi/src/main/kotlin/io/github/smiley4/ktoropenapi/config/SchemaGenerator.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import io.github.smiley4.schemakenerator.reflection.analyzer.TypeCategoryAnalyze
1616
import io.github.smiley4.schemakenerator.reflection.data.EnumConstType
1717
import io.github.smiley4.schemakenerator.serialization.SerializationSteps.addJsonClassDiscriminatorProperty
1818
import io.github.smiley4.schemakenerator.serialization.SerializationSteps.analyzeTypeUsingKotlinxSerialization
19+
import io.github.smiley4.schemakenerator.serialization.SerializationSteps.renameMembers
1920
import io.github.smiley4.schemakenerator.serialization.analyzer.KotlinxSerializationCustomProvider
2021
import io.github.smiley4.schemakenerator.serialization.analyzer.KotlinxSerializationTypeMatcher
2122
import io.github.smiley4.schemakenerator.serialization.analyzer.SerializationTypeAnalyzerModule
@@ -33,8 +34,10 @@ import io.github.smiley4.schemakenerator.swagger.data.RefType
3334
import io.github.smiley4.schemakenerator.swagger.data.TitleType
3435
import io.github.smiley4.schemakenerator.swagger.generator.SwaggerSchemaGenerationModule
3536
import io.swagger.v3.oas.models.media.Schema
37+
import kotlinx.serialization.ExperimentalSerializationApi
3638
import kotlinx.serialization.descriptors.SerialDescriptor
3739
import kotlinx.serialization.json.Json
40+
import kotlinx.serialization.json.JsonNamingStrategy
3841
import kotlinx.serialization.modules.SerializersModule
3942
import kotlin.reflect.KClass
4043
import kotlin.reflect.KType
@@ -249,6 +252,7 @@ object SchemaGenerator {
249252
/**
250253
* A pre-built [GenericSchemaGenerator] using reflection to analyze types and generate the schemas
251254
*/
255+
@OptIn(ExperimentalSerializationApi::class)
252256
fun kotlinx(json: Json? = null, config: KotlinxSerializationConfig.() -> Unit = {}): GenericSchemaGenerator {
253257
val configInstance = KotlinxSerializationConfig()
254258
.apply { if (json != null) useKotlinxConfig(json) }
@@ -262,6 +266,10 @@ object SchemaGenerator {
262266
}
263267
.addJsonClassDiscriminatorProperty()
264268
.handleNameAnnotation()
269+
.let {
270+
if(configInstance.namingStrategy != null) it.renameMembers(configInstance.namingStrategy!!)
271+
else it
272+
}
265273
.generateSwaggerSchema {
266274
optionals = configInstance.optionals
267275
nullables = configInstance.nullables
@@ -285,6 +293,7 @@ object SchemaGenerator {
285293
/**
286294
* The configuration for a pre-built schema generator using kotlinx-serialization for type analysis.
287295
*/
296+
@OptIn(ExperimentalSerializationApi::class)
288297
class KotlinxSerializationConfig internal constructor() {
289298

290299
/**
@@ -347,6 +356,11 @@ object SchemaGenerator {
347356
var explicitNullTypes: Boolean = true
348357

349358

359+
/**
360+
* The naming strategy used to rename members/properties. Set `null` to not do any additional renaming.
361+
*/
362+
var namingStrategy: JsonNamingStrategy? = null
363+
350364
/**
351365
* The format of the titles. Set `null` to not include titles in the schemas.
352366
*/
@@ -447,6 +461,7 @@ object SchemaGenerator {
447461
serializersModule = json.serializersModule
448462
optionals = if (json.configuration.encodeDefaults) RequiredHandling.REQUIRED else RequiredHandling.NON_REQUIRED
449463
nullables = if (json.configuration.explicitNulls) RequiredHandling.REQUIRED else RequiredHandling.NON_REQUIRED
464+
namingStrategy = json.configuration.namingStrategy
450465
}
451466

452467
}

0 commit comments

Comments
 (0)