@@ -16,6 +16,7 @@ import io.github.smiley4.schemakenerator.reflection.analyzer.TypeCategoryAnalyze
1616import io.github.smiley4.schemakenerator.reflection.data.EnumConstType
1717import io.github.smiley4.schemakenerator.serialization.SerializationSteps.addJsonClassDiscriminatorProperty
1818import io.github.smiley4.schemakenerator.serialization.SerializationSteps.analyzeTypeUsingKotlinxSerialization
19+ import io.github.smiley4.schemakenerator.serialization.SerializationSteps.renameMembers
1920import io.github.smiley4.schemakenerator.serialization.analyzer.KotlinxSerializationCustomProvider
2021import io.github.smiley4.schemakenerator.serialization.analyzer.KotlinxSerializationTypeMatcher
2122import io.github.smiley4.schemakenerator.serialization.analyzer.SerializationTypeAnalyzerModule
@@ -33,8 +34,10 @@ import io.github.smiley4.schemakenerator.swagger.data.RefType
3334import io.github.smiley4.schemakenerator.swagger.data.TitleType
3435import io.github.smiley4.schemakenerator.swagger.generator.SwaggerSchemaGenerationModule
3536import io.swagger.v3.oas.models.media.Schema
37+ import kotlinx.serialization.ExperimentalSerializationApi
3638import kotlinx.serialization.descriptors.SerialDescriptor
3739import kotlinx.serialization.json.Json
40+ import kotlinx.serialization.json.JsonNamingStrategy
3841import kotlinx.serialization.modules.SerializersModule
3942import kotlin.reflect.KClass
4043import 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