From d86b9d2372446f3bdb39289bed272fa3829cc9c9 Mon Sep 17 00:00:00 2001 From: sya-ri Date: Sat, 1 May 2021 01:32:47 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20gson=20=E3=82=92=20kotlinx-serializati?= =?UTF-8?q?on=20=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 3 ++- src/main/kotlin/com/kokasai/api/KokasaiApiImpl.kt | 4 ++-- .../kokasai/api/configure/ContentNegotiation.kt | 6 +++--- .../kotlin/com/kokasai/api/group/GroupFile.kt | 15 +++++++++------ src/main/kotlin/com/kokasai/api/http/auth.kt | 2 ++ .../com/kokasai/api/http/group/document/list.kt | 4 ++++ src/main/kotlin/com/kokasai/api/http/login.kt | 2 ++ .../com/kokasai/api/http/user/document/list.kt | 2 ++ .../com/kokasai/api/http/user/group/list.kt | 2 ++ src/main/kotlin/com/kokasai/api/user/UserFile.kt | 12 +++++++----- .../com/kokasai/api/local/KokasaiApiImpl.kt | 4 ++-- 11 files changed, 37 insertions(+), 19 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2e4fe99..b13251f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,6 +2,7 @@ import org.jlleitschuh.gradle.ktlint.KtlintExtension plugins { kotlin("jvm") version "1.5.0" + kotlin("plugin.serialization") version "1.5.0" id("com.github.johnrengelman.shadow") version "7.0.0" id("org.jlleitschuh.gradle.ktlint") version "10.0.0" id("com.github.ben-manes.versions") version "0.38.0" @@ -27,7 +28,7 @@ dependencies { implementation("io.ktor:ktor-auth:1.5.3") implementation("io.ktor:ktor-server-netty:1.5.3") implementation("io.ktor:ktor-server-sessions:1.5.3") - implementation("io.ktor:ktor-gson:1.5.3") + implementation("io.ktor:ktor-serialization:1.5.3") implementation(project(":flowerkt:core")) implementation(project(":flowerkt:database-exposed-sqlite")) implementation(project(":flowerkt:file-webdav")) diff --git a/src/main/kotlin/com/kokasai/api/KokasaiApiImpl.kt b/src/main/kotlin/com/kokasai/api/KokasaiApiImpl.kt index fcf9ae3..799be33 100644 --- a/src/main/kotlin/com/kokasai/api/KokasaiApiImpl.kt +++ b/src/main/kotlin/com/kokasai/api/KokasaiApiImpl.kt @@ -4,7 +4,7 @@ import com.kokasai.api.configure.configureAuthCookie import com.kokasai.api.configure.configureCORS import com.kokasai.api.configure.configureCallLogging import com.kokasai.api.configure.configureFormAuth -import com.kokasai.api.configure.configureGson +import com.kokasai.api.configure.configureSerialization import com.kokasai.api.configure.configureSessionAuth import com.kokasai.api.configure.configureStatusPages import com.kokasai.api.http.HttpRoute @@ -58,7 +58,7 @@ class KokasaiApiImpl : KokasaiApi, UseFileWebDav, UseMailSendGrid { configureCORS() } install(ContentNegotiation) { - configureGson() + configureSerialization() } } } diff --git a/src/main/kotlin/com/kokasai/api/configure/ContentNegotiation.kt b/src/main/kotlin/com/kokasai/api/configure/ContentNegotiation.kt index 139a5db..6a0aaab 100644 --- a/src/main/kotlin/com/kokasai/api/configure/ContentNegotiation.kt +++ b/src/main/kotlin/com/kokasai/api/configure/ContentNegotiation.kt @@ -1,8 +1,8 @@ package com.kokasai.api.configure import io.ktor.features.ContentNegotiation -import io.ktor.gson.gson +import io.ktor.serialization.json -fun ContentNegotiation.Configuration.configureGson() { - gson() +fun ContentNegotiation.Configuration.configureSerialization() { + json() } diff --git a/src/main/kotlin/com/kokasai/api/group/GroupFile.kt b/src/main/kotlin/com/kokasai/api/group/GroupFile.kt index 78161d5..48b39ef 100644 --- a/src/main/kotlin/com/kokasai/api/group/GroupFile.kt +++ b/src/main/kotlin/com/kokasai/api/group/GroupFile.kt @@ -1,23 +1,26 @@ package com.kokasai.api.group -import com.google.gson.Gson +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json import java.io.File +@Serializable data class GroupFile( var owner: List = listOf(), var member: List = listOf(), - var document: List = listOf() + var document: List = listOf(), + var form: List = listOf() ) { - override fun toString(): String = gson.toJson(this) + override fun toString(): String = Json.encodeToString(this) fun toFile(): File = File.createTempFile("tmp", ".json").apply { writeBytes(this@GroupFile.toString().toByteArray()) } companion object { - private val gson = Gson() - - private fun from(json: String): GroupFile? = gson.fromJson(json, GroupFile::class.java) + private fun from(json: String): GroupFile? = Json.decodeFromString(json) fun from(json: File) = from(json.readText()) } diff --git a/src/main/kotlin/com/kokasai/api/http/auth.kt b/src/main/kotlin/com/kokasai/api/http/auth.kt index df1177d..5d5aaa9 100644 --- a/src/main/kotlin/com/kokasai/api/http/auth.kt +++ b/src/main/kotlin/com/kokasai/api/http/auth.kt @@ -12,7 +12,9 @@ import io.ktor.routing.post import io.ktor.sessions.get import io.ktor.sessions.sessionId import io.ktor.sessions.sessions +import kotlinx.serialization.Serializable +@Serializable data class AuthResponse(val auth: String?) val auth: RouteAction = { diff --git a/src/main/kotlin/com/kokasai/api/http/group/document/list.kt b/src/main/kotlin/com/kokasai/api/http/group/document/list.kt index d10a19e..8cf99db 100644 --- a/src/main/kotlin/com/kokasai/api/http/group/document/list.kt +++ b/src/main/kotlin/com/kokasai/api/http/group/document/list.kt @@ -12,8 +12,12 @@ import io.ktor.routing.get import io.ktor.routing.post import io.ktor.sessions.get import io.ktor.sessions.sessions +import kotlinx.serialization.Serializable +@Serializable data class ListRequest(val document: List) + +@Serializable data class ListResponse(val document: List) val list: RouteAction = { diff --git a/src/main/kotlin/com/kokasai/api/http/login.kt b/src/main/kotlin/com/kokasai/api/http/login.kt index ebd876e..196dc59 100644 --- a/src/main/kotlin/com/kokasai/api/http/login.kt +++ b/src/main/kotlin/com/kokasai/api/http/login.kt @@ -8,7 +8,9 @@ import io.ktor.request.ContentTransformationException import io.ktor.request.receive import io.ktor.response.respond import io.ktor.routing.post +import kotlinx.serialization.Serializable +@Serializable data class LoginRequest(val id: String) val login: RouteAction = { diff --git a/src/main/kotlin/com/kokasai/api/http/user/document/list.kt b/src/main/kotlin/com/kokasai/api/http/user/document/list.kt index b4b2c43..61b3dc2 100644 --- a/src/main/kotlin/com/kokasai/api/http/user/document/list.kt +++ b/src/main/kotlin/com/kokasai/api/http/user/document/list.kt @@ -9,7 +9,9 @@ import io.ktor.response.respond import io.ktor.routing.get import io.ktor.sessions.get import io.ktor.sessions.sessions +import kotlinx.serialization.Serializable +@Serializable data class ListResponse(val document: List) val list: RouteAction = { diff --git a/src/main/kotlin/com/kokasai/api/http/user/group/list.kt b/src/main/kotlin/com/kokasai/api/http/user/group/list.kt index a7cecce..d441ee7 100644 --- a/src/main/kotlin/com/kokasai/api/http/user/group/list.kt +++ b/src/main/kotlin/com/kokasai/api/http/user/group/list.kt @@ -9,7 +9,9 @@ import io.ktor.response.respond import io.ktor.routing.get import io.ktor.sessions.get import io.ktor.sessions.sessions +import kotlinx.serialization.Serializable +@Serializable data class ListResponse(val group: List) val list: RouteAction = { diff --git a/src/main/kotlin/com/kokasai/api/user/UserFile.kt b/src/main/kotlin/com/kokasai/api/user/UserFile.kt index 7bc19b6..4ae1f58 100644 --- a/src/main/kotlin/com/kokasai/api/user/UserFile.kt +++ b/src/main/kotlin/com/kokasai/api/user/UserFile.kt @@ -1,9 +1,13 @@ package com.kokasai.api.user -import com.google.gson.Gson import com.kokasai.api.group.Group +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json import java.io.File +@Serializable data class UserFile( val group: MutableList = mutableListOf() ) { @@ -11,16 +15,14 @@ data class UserFile( suspend fun getDocument() = getGroup().map { it.file.document }.flatten() - override fun toString(): String = gson.toJson(this) + override fun toString(): String = Json.encodeToString(this) fun toFile(): File = File.createTempFile("tmp", ".json").apply { writeBytes(this@UserFile.toString().toByteArray()) } companion object { - private val gson = Gson() - - private fun from(json: String): UserFile? = gson.fromJson(json, UserFile::class.java) + private fun from(json: String): UserFile? = Json.decodeFromString(json) fun from(json: File) = from(json.readText()) } diff --git a/src/test/kotlin/com/kokasai/api/local/KokasaiApiImpl.kt b/src/test/kotlin/com/kokasai/api/local/KokasaiApiImpl.kt index f565c6c..6776509 100644 --- a/src/test/kotlin/com/kokasai/api/local/KokasaiApiImpl.kt +++ b/src/test/kotlin/com/kokasai/api/local/KokasaiApiImpl.kt @@ -5,7 +5,7 @@ import com.kokasai.api.configure.configureAuthCookie import com.kokasai.api.configure.configureCORS import com.kokasai.api.configure.configureCallLogging import com.kokasai.api.configure.configureFormAuth -import com.kokasai.api.configure.configureGson +import com.kokasai.api.configure.configureSerialization import com.kokasai.api.configure.configureSessionAuth import com.kokasai.api.configure.configureStatusPages import com.kokasai.api.http.HttpRoute @@ -58,7 +58,7 @@ class KokasaiApiImpl : KokasaiApi { configureCORS() } install(ContentNegotiation) { - configureGson() + configureSerialization() } } }