Move FormUrlEncodedFormat class
authorLanius Trolling <lanius@laniustrolling.dev>
Fri, 5 Apr 2024 22:32:33 +0000 (18:32 -0400)
committerLanius Trolling <lanius@laniustrolling.dev>
Fri, 5 Apr 2024 22:32:33 +0000 (18:32 -0400)
src/jvmMain/kotlin/info/mechyrdia/route/resource_bodies.kt
src/jvmMain/kotlin/info/mechyrdia/route/resource_handler.kt

index 105e110fcc1b84b0859d8ac1c81ebc28120c252d..acf71c6560151afe278f662c986e9373c7ecea11 100644 (file)
@@ -1,13 +1,10 @@
 package info.mechyrdia.route
 
 import info.mechyrdia.lore.TextAlignment
-import io.ktor.http.*
-import io.ktor.resources.serialization.*
 import kotlinx.html.FlowContent
 import kotlinx.html.p
 import kotlinx.html.textArea
-import kotlinx.serialization.*
-import kotlinx.serialization.modules.SerializersModule
+import kotlinx.serialization.Serializable
 
 @Serializable
 class LoginPayload(override val csrfToken: String, val nation: String, val checksum: String, val token: String) : CsrfProtectedResourcePayload
@@ -57,15 +54,3 @@ class PokhwalishLanguagePayload(val lines: List<String>)
 
 @Serializable
 class PreviewCommentPayload(val lines: List<String>)
-
-class FormUrlEncodedFormat(private val resourcesFormat: ResourcesFormat) : StringFormat {
-       override val serializersModule: SerializersModule = resourcesFormat.serializersModule
-       
-       override fun <T> encodeToString(serializer: SerializationStrategy<T>, value: T): String {
-               return resourcesFormat.encodeToParameters(serializer as KSerializer<T>, value).formUrlEncode()
-       }
-       
-       override fun <T> decodeFromString(deserializer: DeserializationStrategy<T>, string: String): T {
-               return resourcesFormat.decodeFromParameters(deserializer as KSerializer<T>, string.replace("+", "%20").parseUrlEncodedParameters())
-       }
-}
index df16f5e588e039e7b7abaea48b1ee49c838b3934..fab7c34940cb663903df9428cbc28787b5580558 100644 (file)
@@ -1,11 +1,15 @@
 package info.mechyrdia.route
 
 import io.ktor.http.*
+import io.ktor.resources.serialization.*
 import io.ktor.server.application.*
 import io.ktor.server.resources.*
 import io.ktor.server.routing.*
 import io.ktor.util.pipeline.*
+import kotlinx.serialization.DeserializationStrategy
 import kotlinx.serialization.KSerializer
+import kotlinx.serialization.SerializationStrategy
+import kotlinx.serialization.StringFormat
 import kotlinx.serialization.builtins.nullable
 import kotlinx.serialization.builtins.serializer
 import kotlinx.serialization.descriptors.PrimitiveKind
@@ -13,6 +17,7 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
 import kotlinx.serialization.descriptors.SerialDescriptor
 import kotlinx.serialization.encoding.Decoder
 import kotlinx.serialization.encoding.Encoder
+import kotlinx.serialization.modules.SerializersModule
 import kotlin.enums.EnumEntries
 
 interface ResourceHandler {
@@ -61,6 +66,18 @@ abstract class KeyedEnumSerializer<E : Enum<E>>(val entries: EnumEntries<E>, val
        }
 }
 
+class FormUrlEncodedFormat(private val resourcesFormat: ResourcesFormat) : StringFormat {
+       override val serializersModule: SerializersModule = resourcesFormat.serializersModule
+       
+       override fun <T> encodeToString(serializer: SerializationStrategy<T>, value: T): String {
+               return resourcesFormat.encodeToParameters(serializer as KSerializer<T>, value).formUrlEncode()
+       }
+       
+       override fun <T> decodeFromString(deserializer: DeserializationStrategy<T>, string: String): T {
+               return resourcesFormat.decodeFromParameters(deserializer as KSerializer<T>, string.replace("+", "%20").parseUrlEncodedParameters())
+       }
+}
+
 inline fun <reified T : Any> Application.href(resource: T, hash: String? = null): String = URLBuilder().also { href(resource, it) }.build().fullPath + hash?.let { "#$it" }.orEmpty()
 inline fun <reified T : Any> ApplicationCall.href(resource: T, hash: String? = null) = application.href(resource, hash)
 inline fun <reified T : Any> PipelineContext<Unit, ApplicationCall>.href(resource: T, hash: String? = null) = application.href(resource, hash)