From: Lanius Trolling Date: Fri, 5 Apr 2024 22:32:33 +0000 (-0400) Subject: Move FormUrlEncodedFormat class X-Git-Url: https://gitweb.starshipfights.net/?a=commitdiff_plain;h=1d0a17808b89ee16a6e8d78cbafecfcafe96699a;p=factbooks Move FormUrlEncodedFormat class --- diff --git a/src/jvmMain/kotlin/info/mechyrdia/route/resource_bodies.kt b/src/jvmMain/kotlin/info/mechyrdia/route/resource_bodies.kt index 105e110..acf71c6 100644 --- a/src/jvmMain/kotlin/info/mechyrdia/route/resource_bodies.kt +++ b/src/jvmMain/kotlin/info/mechyrdia/route/resource_bodies.kt @@ -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) @Serializable class PreviewCommentPayload(val lines: List) - -class FormUrlEncodedFormat(private val resourcesFormat: ResourcesFormat) : StringFormat { - override val serializersModule: SerializersModule = resourcesFormat.serializersModule - - override fun encodeToString(serializer: SerializationStrategy, value: T): String { - return resourcesFormat.encodeToParameters(serializer as KSerializer, value).formUrlEncode() - } - - override fun decodeFromString(deserializer: DeserializationStrategy, string: String): T { - return resourcesFormat.decodeFromParameters(deserializer as KSerializer, string.replace("+", "%20").parseUrlEncodedParameters()) - } -} diff --git a/src/jvmMain/kotlin/info/mechyrdia/route/resource_handler.kt b/src/jvmMain/kotlin/info/mechyrdia/route/resource_handler.kt index df16f5e..fab7c34 100644 --- a/src/jvmMain/kotlin/info/mechyrdia/route/resource_handler.kt +++ b/src/jvmMain/kotlin/info/mechyrdia/route/resource_handler.kt @@ -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>(val entries: EnumEntries, val } } +class FormUrlEncodedFormat(private val resourcesFormat: ResourcesFormat) : StringFormat { + override val serializersModule: SerializersModule = resourcesFormat.serializersModule + + override fun encodeToString(serializer: SerializationStrategy, value: T): String { + return resourcesFormat.encodeToParameters(serializer as KSerializer, value).formUrlEncode() + } + + override fun decodeFromString(deserializer: DeserializationStrategy, string: String): T { + return resourcesFormat.decodeFromParameters(deserializer as KSerializer, string.replace("+", "%20").parseUrlEncodedParameters()) + } +} + inline fun Application.href(resource: T, hash: String? = null): String = URLBuilder().also { href(resource, it) }.build().fullPath + hash?.let { "#$it" }.orEmpty() inline fun ApplicationCall.href(resource: T, hash: String? = null) = application.href(resource, hash) inline fun PipelineContext.href(resource: T, hash: String? = null) = application.href(resource, hash)