From 6a5523c9983fb7852373b427e4f1c6a209cd9a64 Mon Sep 17 00:00:00 2001 From: Michael Bull Date: Thu, 30 Dec 2021 11:42:07 +0000 Subject: [PATCH] Migrate to Ktor 2 --- buildSrc/src/main/kotlin/Versions.kt | 2 +- example/build.gradle.kts | 5 ++- .../michaelbull/result/example/Application.kt | 45 ++++++++++--------- .../example/model/domain/PersonalName.kt | 18 -------- 4 files changed, 29 insertions(+), 41 deletions(-) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index af42735..a2d231b 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -4,7 +4,7 @@ object Versions { const val kotlinBenchmark = "0.3.1" const val kotlinCoroutines = "1.5.2" const val kotlinCoroutinesTest = "1.5.2" - const val ktor = "1.5.4" + const val ktor = "2.0.0-beta-1" const val logback = "1.2.3" const val versionsPlugin = "0.39.0" } diff --git a/example/build.gradle.kts b/example/build.gradle.kts index 6dfe359..0666314 100644 --- a/example/build.gradle.kts +++ b/example/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } application { - mainClass.set("io.ktor.server.netty.EngineMain") + mainClass.set("com.github.michaelbull.result.example.ApplicationKt") } dependencies { @@ -14,8 +14,9 @@ dependencies { implementation(kotlin("stdlib-jdk8")) implementation("ch.qos.logback:logback-classic:${Versions.logback}") implementation("io.ktor:ktor-server-core:${Versions.ktor}") + implementation("io.ktor:ktor-server-content-negotiation:${Versions.ktor}") + implementation("io.ktor:ktor-serialization-jackson:${Versions.ktor}") implementation("io.ktor:ktor-server-netty:${Versions.ktor}") - implementation("io.ktor:ktor-gson:${Versions.ktor}") } tasks.withType(KotlinCompile::class.java).all { diff --git a/example/src/main/kotlin/com/github/michaelbull/result/example/Application.kt b/example/src/main/kotlin/com/github/michaelbull/result/example/Application.kt index 4a27c79..4aedc2a 100644 --- a/example/src/main/kotlin/com/github/michaelbull/result/example/Application.kt +++ b/example/src/main/kotlin/com/github/michaelbull/result/example/Application.kt @@ -1,5 +1,6 @@ package com.github.michaelbull.result.example +import com.fasterxml.jackson.databind.SerializationFeature import com.github.michaelbull.result.Result import com.github.michaelbull.result.andThen import com.github.michaelbull.result.example.model.domain.Created @@ -28,32 +29,37 @@ import com.github.michaelbull.result.example.repository.InMemoryCustomerReposito import com.github.michaelbull.result.example.service.CustomerService import com.github.michaelbull.result.mapBoth import com.github.michaelbull.result.toResultOr -import io.ktor.application.Application -import io.ktor.application.call -import io.ktor.application.install -import io.ktor.features.CallLogging -import io.ktor.features.Compression -import io.ktor.features.ContentNegotiation -import io.ktor.features.DefaultHeaders -import io.ktor.gson.gson import io.ktor.http.HttpStatusCode import io.ktor.http.Parameters -import io.ktor.request.receive -import io.ktor.response.respond -import io.ktor.routing.get -import io.ktor.routing.post -import io.ktor.routing.routing +import io.ktor.serialization.jackson.jackson +import io.ktor.server.application.Application +import io.ktor.server.application.call +import io.ktor.server.application.install +import io.ktor.server.engine.embeddedServer +import io.ktor.server.netty.Netty +import io.ktor.server.plugins.ContentNegotiation +import io.ktor.server.request.receive +import io.ktor.server.response.respond +import io.ktor.server.routing.get +import io.ktor.server.routing.post +import io.ktor.server.routing.routing -fun Application.main() { - install(DefaultHeaders) - install(Compression) - install(CallLogging) +fun main() { + embeddedServer(Netty, port = 8080, host = "0.0.0.0") { + configureRouting() + configureSerialization() + }.start(wait = true) +} + +fun Application.configureSerialization() { install(ContentNegotiation) { - gson { - setPrettyPrinting() + jackson { + enable(SerializationFeature.INDENT_OUTPUT) } } +} +fun Application.configureRouting() { val customers = setOf( CustomerEntity(CustomerId(1L), "Michael", "Bull", "michael@example.com"), CustomerEntity(CustomerId(2L), "Kevin", "Herron", "kevin@example.com"), @@ -86,7 +92,6 @@ fun Application.main() { } } } - } private fun Parameters.readId(): Result { diff --git a/example/src/main/kotlin/com/github/michaelbull/result/example/model/domain/PersonalName.kt b/example/src/main/kotlin/com/github/michaelbull/result/example/model/domain/PersonalName.kt index 710ee0b..afdd02f 100644 --- a/example/src/main/kotlin/com/github/michaelbull/result/example/model/domain/PersonalName.kt +++ b/example/src/main/kotlin/com/github/michaelbull/result/example/model/domain/PersonalName.kt @@ -1,24 +1,6 @@ package com.github.michaelbull.result.example.model.domain -import com.github.michaelbull.result.Err -import com.github.michaelbull.result.Ok -import com.github.michaelbull.result.Result - data class PersonalName( val first: String, val last: String ) - -private const val MAX_LENGTH = 10 - -fun Pair.toPersonalName(): Result { - val (first, last) = this - - return when { - first.isNullOrBlank() -> Err(FirstNameRequired) - last.isNullOrBlank() -> Err(LastNameRequired) - first.length > MAX_LENGTH -> Err(FirstNameTooLong) - last.length > MAX_LENGTH -> Err(LastNameTooLong) - else -> Ok(PersonalName(first, last)) - } -}