commonize url query parameters encoding/decoding

This commit is contained in:
2020-08-31 00:29:34 +06:00
parent 00068a064f
commit 4cc4d3d4ec
6 changed files with 41 additions and 37 deletions

View File

@@ -1,14 +1,12 @@
package com.insanusmokrassar.postssystem.ktor.server
import com.insanusmokrassar.postssystem.ktor.fromHex
import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
import io.ktor.application.ApplicationCall
import io.ktor.http.HttpStatusCode
import io.ktor.response.respond
import io.ktor.response.respondBytes
import io.ktor.util.toByteArray
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.*
suspend fun <T> ApplicationCall.unianswer(
answerSerializer: SerializationStrategy<T>,
@@ -27,18 +25,6 @@ suspend fun <T> ApplicationCall.uniload(
request.receiveChannel().toByteArray()
)
fun <T> ApplicationCall.uniloadFromQuery(
parameterName: String,
deserializer: DeserializationStrategy<T>
): T? = getQueryParameter(parameterName) ?.fromHex(deserializer)
suspend fun <T> ApplicationCall.uniloadFromQueryOrSendError(
parameterName: String,
deserializer: DeserializationStrategy<T>
): T? = uniloadFromQuery(parameterName, deserializer) ?: null.also {
respond(HttpStatusCode.BadRequest, "Request query parameters must contains $parameterName")
}
suspend fun ApplicationCall.getParameterOrSendError(
field: String
) = parameters[field].also {
@@ -58,3 +44,22 @@ suspend fun ApplicationCall.getQueryParameterOrSendError(
respond(HttpStatusCode.BadRequest, "Request query parameters must contains $field")
}
}
fun <T> ApplicationCall.decodeUrlQueryValue(
field: String,
deserializer: DeserializationStrategy<T>
) = getQueryParameter(field) ?.let {
standardKtorSerialFormat.decodeFromHexString(
deserializer,
it
)
}
fun <T> ApplicationCall.decodeUrlQueryValueOrSendError(
field: String,
deserializer: DeserializationStrategy<T>
) = decodeUrlQueryValue(field, deserializer).also {
if (it == null) {
respond(HttpStatusCode.BadRequest, "Request query parameters must contains $field")
}
}