fixes of todos

This commit is contained in:
2020-08-26 11:32:11 +06:00
parent 01ab884e68
commit 83fd9f264a
6 changed files with 74 additions and 53 deletions
ktor
common
src
commonMain
kotlin
com
insanusmokrassar
postssystem
server
src
jvmMain
kotlin
com
insanusmokrassar
postssystem
utils/repos/ktor
client
src
commonMain
kotlin
com
insanusmokrassar
server
src
jvmMain
kotlin
com
insanusmokrassar

@ -0,0 +1,6 @@
package com.insanusmokrassar.postssystem.ktor
import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.encodeToHexString
fun <T> T.toHex(with: SerializationStrategy<T>) = standardKtorSerialFormat.encodeToHexString(with, this)

@ -2,12 +2,12 @@ package com.insanusmokrassar.postssystem.ktor.server
import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
import io.ktor.application.ApplicationCall
import io.ktor.application.call
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>,
@ -26,6 +26,23 @@ suspend fun <T> ApplicationCall.uniload(
request.receiveChannel().toByteArray()
)
fun <T> ApplicationCall.uniloadFromQuery(
parameterName: String,
deserializer: DeserializationStrategy<T>
): T? {
return standardKtorSerialFormat.decodeFromHexString(
deserializer,
getQueryParameter(parameterName) ?: return null
)
}
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 {
@ -34,10 +51,14 @@ suspend fun ApplicationCall.getParameterOrSendError(
}
}
fun ApplicationCall.getQueryParameter(
field: String
) = request.queryParameters[field]
suspend fun ApplicationCall.getQueryParameterOrSendError(
field: String
) = request.queryParameters[field].also {
) = getQueryParameter(field).also {
if (it == null) {
respond(HttpStatusCode.BadRequest, "Request query parametersmust contains $field")
respond(HttpStatusCode.BadRequest, "Request query parameters must contains $field")
}
}