Skip to content

Commit 3dbc137

Browse files
committed
Added Set Schema Provider and added properties to array model
1 parent be025c9 commit 3dbc137

File tree

8 files changed

+50
-8
lines changed

8 files changed

+50
-8
lines changed

src/main/kotlin/com/papsign/ktor/openapigen/model/schema/SchemaModel.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ sealed class SchemaModel<T>: DataModel {
3838
var nullable: Boolean = false,
3939
override var example: T? = null,
4040
override var examples: List<T>? = null,
41+
var uniqueItems: Boolean? = null,
42+
var minItems: Int? = null,
43+
var maxItems: Int? = null,
4144
var type: DataType = DataType.array
4245
) : SchemaModel<T>()
4346

src/main/kotlin/com/papsign/ktor/openapigen/schema/builder/provider/DefaultEnumSchemaProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ import com.papsign.ktor.openapigen.OpenAPIGen
44
import com.papsign.ktor.openapigen.OpenAPIGenModuleExtension
55
import com.papsign.ktor.openapigen.getKType
66
import com.papsign.ktor.openapigen.model.schema.SchemaModel
7+
import com.papsign.ktor.openapigen.modules.DefaultOpenAPIModule
78
import com.papsign.ktor.openapigen.modules.ModuleProvider
89
import com.papsign.ktor.openapigen.schema.builder.FinalSchemaBuilder
910
import com.papsign.ktor.openapigen.schema.builder.SchemaBuilder
1011
import kotlin.reflect.KType
1112
import kotlin.reflect.jvm.jvmErasure
1213

13-
object DefaultEnumSchemaProvider: SchemaBuilderProviderModule, OpenAPIGenModuleExtension {
14+
object DefaultEnumSchemaProvider: SchemaBuilderProviderModule, OpenAPIGenModuleExtension, DefaultOpenAPIModule {
1415

1516
private object Builder: SchemaBuilder {
1617
override val superType: KType = getKType<Enum<*>?>()

src/main/kotlin/com/papsign/ktor/openapigen/schema/builder/provider/DefaultMapSchemaProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import com.papsign.ktor.openapigen.OpenAPIGen
44
import com.papsign.ktor.openapigen.OpenAPIGenModuleExtension
55
import com.papsign.ktor.openapigen.getKType
66
import com.papsign.ktor.openapigen.model.schema.SchemaModel
7+
import com.papsign.ktor.openapigen.modules.DefaultOpenAPIModule
78
import com.papsign.ktor.openapigen.modules.ModuleProvider
89
import com.papsign.ktor.openapigen.schema.builder.FinalSchemaBuilder
910
import com.papsign.ktor.openapigen.schema.builder.SchemaBuilder
1011
import kotlin.reflect.KType
1112

12-
object DefaultMapSchemaProvider: SchemaBuilderProviderModule, OpenAPIGenModuleExtension {
13+
object DefaultMapSchemaProvider: SchemaBuilderProviderModule, OpenAPIGenModuleExtension, DefaultOpenAPIModule {
1314

1415
override fun provide(apiGen: OpenAPIGen, provider: ModuleProvider<*>): List<SchemaBuilder> {
1516
return listOf(Builder)

src/main/kotlin/com/papsign/ktor/openapigen/schema/builder/provider/DefaultObjectSchemaProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.papsign.ktor.openapigen.schema.builder.provider
33
import com.papsign.ktor.openapigen.*
44
import com.papsign.ktor.openapigen.classLogger
55
import com.papsign.ktor.openapigen.model.schema.SchemaModel
6+
import com.papsign.ktor.openapigen.modules.DefaultOpenAPIModule
67
import com.papsign.ktor.openapigen.modules.ModuleProvider
78
import com.papsign.ktor.openapigen.modules.ofClass
89
import com.papsign.ktor.openapigen.schema.builder.FinalSchemaBuilder
@@ -15,7 +16,7 @@ import kotlin.reflect.full.starProjectedType
1516
import kotlin.reflect.full.withNullability
1617
import kotlin.reflect.jvm.jvmErasure
1718

18-
object DefaultObjectSchemaProvider : SchemaBuilderProviderModule, OpenAPIGenModuleExtension {
19+
object DefaultObjectSchemaProvider : SchemaBuilderProviderModule, OpenAPIGenModuleExtension, DefaultOpenAPIModule {
1920
private val log = classLogger()
2021

2122
override fun provide(apiGen: OpenAPIGen, provider: ModuleProvider<*>): List<SchemaBuilder> {

src/main/kotlin/com/papsign/ktor/openapigen/schema/builder/provider/DefaultPrimitiveSchemaProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.papsign.ktor.openapigen.getKType
66
import com.papsign.ktor.openapigen.model.schema.DataFormat
77
import com.papsign.ktor.openapigen.model.schema.DataType
88
import com.papsign.ktor.openapigen.model.schema.SchemaModel
9+
import com.papsign.ktor.openapigen.modules.DefaultOpenAPIModule
910
import com.papsign.ktor.openapigen.modules.ModuleProvider
1011
import com.papsign.ktor.openapigen.schema.builder.FinalSchemaBuilder
1112
import com.papsign.ktor.openapigen.schema.builder.SchemaBuilder
@@ -16,7 +17,7 @@ import java.time.Instant
1617
import java.util.*
1718
import kotlin.reflect.KType
1819

19-
object DefaultPrimitiveSchemaProvider: SchemaBuilderProviderModule, OpenAPIGenModuleExtension {
20+
object DefaultPrimitiveSchemaProvider: SchemaBuilderProviderModule, OpenAPIGenModuleExtension, DefaultOpenAPIModule {
2021

2122
private data class Builder(override val superType: KType, private val model: SchemaModel.SchemaModelLitteral<*>) : SchemaBuilder {
2223
override fun build(type: KType, builder: FinalSchemaBuilder, finalize: (SchemaModel<*>)->SchemaModel<*>): SchemaModel<*> {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.papsign.ktor.openapigen.schema.builder.provider
2+
3+
import com.papsign.ktor.openapigen.OpenAPIGen
4+
import com.papsign.ktor.openapigen.OpenAPIGenModuleExtension
5+
import com.papsign.ktor.openapigen.getKType
6+
import com.papsign.ktor.openapigen.model.schema.SchemaModel
7+
import com.papsign.ktor.openapigen.modules.DefaultOpenAPIModule
8+
import com.papsign.ktor.openapigen.modules.ModuleProvider
9+
import com.papsign.ktor.openapigen.schema.builder.FinalSchemaBuilder
10+
import com.papsign.ktor.openapigen.schema.builder.SchemaBuilder
11+
import kotlin.reflect.KType
12+
import kotlin.reflect.full.withNullability
13+
14+
object DefaultSetSchemaProvider: SchemaBuilderProviderModule, OpenAPIGenModuleExtension, DefaultOpenAPIModule {
15+
16+
private val builders = listOf(
17+
Builder(getKType<Set<*>?>()) { type: KType ->
18+
type.arguments[0].type ?: error("bad type $type: star projected types are not supported")
19+
}
20+
)
21+
22+
override fun provide(apiGen: OpenAPIGen, provider: ModuleProvider<*>): List<SchemaBuilder> {
23+
return builders
24+
}
25+
26+
private data class Builder(override val superType: KType, private val getter: (KType) -> KType) :
27+
SchemaBuilder {
28+
override fun build(type: KType, builder: FinalSchemaBuilder, finalize: (SchemaModel<*>)->SchemaModel<*>): SchemaModel<*> {
29+
checkType(type)
30+
return finalize(SchemaModel.SchemaModelArr<Any?>(builder.build(getter(type)), type.isMarkedNullable, uniqueItems = true))
31+
}
32+
}
33+
}
34+

src/main/kotlin/com/papsign/ktor/openapigen/schema/builder/provider/NothingSchemaProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ import com.papsign.ktor.openapigen.OpenAPIGenModuleExtension
55
import com.papsign.ktor.openapigen.getKType
66
import com.papsign.ktor.openapigen.model.schema.DataType
77
import com.papsign.ktor.openapigen.model.schema.SchemaModel
8+
import com.papsign.ktor.openapigen.modules.DefaultOpenAPIModule
89
import com.papsign.ktor.openapigen.modules.ModuleProvider
910
import com.papsign.ktor.openapigen.schema.builder.FinalSchemaBuilder
1011
import com.papsign.ktor.openapigen.schema.builder.SchemaBuilder
1112
import kotlin.reflect.KType
1213
import kotlin.reflect.full.createType
1314
import kotlin.reflect.jvm.jvmErasure
1415

15-
object NothingSchemaProvider: SchemaBuilderProviderModule, OpenAPIGenModuleExtension {
16+
object NothingSchemaProvider: SchemaBuilderProviderModule, OpenAPIGenModuleExtension, DefaultOpenAPIModule {
1617

1718
private object NothingNullableProvider {
1819
private val value: Nothing? = null

src/test/kotlin/Basic.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,12 @@ object Basic {
8989

9090
route("block") {
9191
// use Unit if there are no parameters / body / response
92-
post<Unit, StringUsable, StringUsable>(
92+
post<Unit, StringUsable, Set<StringUsable>>(
9393
info("String Post Endpoint", "This is a String Post Endpoint"),
94-
exampleRequest = StringUsable("Ho"),
94+
exampleRequest = setOf(StringUsable("Ho")),
9595
exampleResponse = StringUsable("Ho")
9696
) { params, body ->
97-
respond(body)
97+
respond(body.first())
9898
}
9999
}
100100

0 commit comments

Comments
 (0)