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
@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())
- }
-}
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
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 {
}
}
+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)