Skip to content

Commit

Permalink
Update Ktor to latest version (#6)
Browse files Browse the repository at this point in the history
* update ktor & kotlin to latest versions

* Update README.md
  • Loading branch information
LukasForst authored Aug 12, 2022
1 parent 20eba1b commit b989332
Show file tree
Hide file tree
Showing 7 changed files with 19 additions and 11 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Central_.

```kotlin
dependencies {
implementation("dev.forst", "ktor-openapi-generator", "0.4.4")
implementation("dev.forst", "ktor-openapi-generator", "0.4.5")
}
```

Expand Down Expand Up @@ -88,4 +88,4 @@ Extra Features:

## Examples

Take a look at [a few examples](https://github.com/papsign/Ktor-OpenAPI-Generator/wiki/A-few-examples)
Take a look at [a few examples](https://github.com/papsign/Ktor-OpenAPI-Generator/wiki/A-few-examples)
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import java.net.URL


plugins {
kotlin("jvm") version "1.6.21"
kotlin("jvm") version "1.7.10"

`maven-publish`
signing
Expand All @@ -25,7 +25,7 @@ dependencies {
implementation(kotlin("stdlib-jdk8"))

// Ktor server dependencies
val ktorVersion = "2.0.3"
val ktorVersion = "2.1.0"
implementation("io.ktor", "ktor-server-core", ktorVersion)
implementation("io.ktor", "ktor-server-auth", ktorVersion)
implementation("io.ktor", "ktor-serialization-jackson", ktorVersion)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ private val cache = Collections.synchronizedMap(HashMap<KParameter, String?>())

val KParameter.openAPIName: String?
get() = cache.getOrPut(this) {
val caseSensitiveName = findAnnotation<OpenAPIName>()?.name ?: name
if (findAnnotation<HeaderParam>() != null) caseSensitiveName?.toLowerCase() else caseSensitiveName
val caseSensitiveName = findAnnotation<OpenAPIName>()?.name ?: name
if (findAnnotation<HeaderParam>() != null) caseSensitiveName?.lowercase(Locale.getDefault()) else caseSensitiveName
}

fun <T> KParameter.remapOpenAPINames(map: Map<String, T>): Map<String, T> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ package com.papsign.ktor.openapigen.annotations.type.string.lowercase
import com.papsign.ktor.openapigen.getKType
import com.papsign.ktor.openapigen.validation.Validator
import com.papsign.ktor.openapigen.annotations.type.SingleTypeValidator
import java.util.Locale

object LowerCaseValidator : SingleTypeValidator<LowerCase>(getKType<String>(), { LowerCaseValidator }), Validator {
override fun <T> validate(subject: T?): T? {
@Suppress("UNCHECKED_CAST")
return (subject as String?)?.toLowerCase() as T?
return (subject as String?)?.lowercase(Locale.getDefault()) as T?
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ object MultipartFormDataContentProvider : BodyParser, OpenAPIGenModuleExtension
private val typeContentTypes = HashMap<KType, Map<String, MediaTypeEncodingModel>>()


override suspend fun <T : Any> parseBody(type: KType, request: PipelineContext<Unit, ApplicationCall>): T {
override suspend fun <T : Any> parseBody(clazz: KType, request: PipelineContext<Unit, ApplicationCall>): T {
val objectMap = HashMap<String, Any>()
request.context.receiveMultipart().forEachPart {
val name = it.name
Expand All @@ -83,11 +83,12 @@ object MultipartFormDataContentProvider : BodyParser, OpenAPIGenModuleExtension
is PartData.BinaryItem -> {
objectMap[name] = ContentInputStream(it.contentType, it.provider().asStream())
}
else -> {}
}
}
}
@Suppress("UNCHECKED_CAST")
val ctor = (type.classifier as KClass<T>).primaryConstructor!!
val ctor = (clazz.classifier as KClass<T>).primaryConstructor!!
return ctor.callBy(ctor.parameters.associateWith {
val raw = objectMap[it.openAPIName]
if ((raw == null || (raw !is InputStream && streamTypes.contains(it.type))) && it.type.isMarkedNullable) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.papsign.ktor.openapigen.modules.openapi.HandlerModule
import com.papsign.ktor.openapigen.modules.openapi.OperationModule
import com.papsign.ktor.openapigen.modules.providers.MethodProvider
import com.papsign.ktor.openapigen.modules.providers.PathProvider
import java.util.Locale
import org.slf4j.Logger
import org.slf4j.LoggerFactory

Expand All @@ -25,7 +26,7 @@ object RouteHandler: HandlerModule {
val operationModules = provider.ofType<OperationModule>()
apiGen.api.paths.getOrPut(path) { PathItemModel() }.also {pathItem ->
methods.forEach {
val name = it.method.value.toLowerCase()
val name = it.method.value.lowercase(Locale.getDefault())
//if (pathItem.containsKey(name)) error("$path::$name already defined")
val op = pathItem.getOrPut(name) { OperationModel() } as OperationModel
operationModules.forEach {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import com.papsign.ktor.openapigen.schema.builder.provider.FinalSchemaBuilderPro
import io.ktor.http.Headers
import io.ktor.http.Parameters
import io.ktor.util.toMap
import java.util.Locale
import kotlin.reflect.KFunction
import kotlin.reflect.KParameter
import kotlin.reflect.full.findAnnotation
Expand All @@ -29,7 +30,11 @@ class ModularParameterHandler<T>(val parsers: Map<KParameter, Builder<*>>, val c

override fun parse(parameters: Parameters, headers: Headers): T {
return constructor.callBy(parsers.mapValues {
val value = it.value.build(it.key.name.toString(), it.key.remapOpenAPINames(parameters.toMap() + headers.toMap().entries.groupBy { it.key.toLowerCase() }.mapValues { it.value.flatMap { it.value } }))
val value = it.value.build(it.key.name.toString(), it.key.remapOpenAPINames(parameters.toMap() + headers.toMap().entries.groupBy {
it.key.lowercase(
Locale.getDefault()
)
}.mapValues { it.value.flatMap { it.value } }))
if (value != null || it.key.type.isMarkedNullable) {
value
} else {
Expand Down

0 comments on commit b989332

Please sign in to comment.