MicroUtils/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/StandardHttpClientGetPost.kt

36 lines
1.1 KiB
Kotlin
Raw Normal View History

2020-09-22 02:20:22 +00:00
package dev.inmo.micro_utils.ktor.client
2020-09-26 15:42:05 +00:00
import dev.inmo.micro_utils.ktor.common.*
2020-09-22 02:20:22 +00:00
import io.ktor.client.HttpClient
import io.ktor.client.request.get
import io.ktor.client.request.post
2020-11-02 15:34:49 +00:00
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.SerializationStrategy
2020-09-22 02:20:22 +00:00
typealias BodyPair<T> = Pair<SerializationStrategy<T>, T>
suspend fun <ResultType> HttpClient.uniget(
url: String,
resultDeserializer: DeserializationStrategy<ResultType>
2020-09-26 15:42:05 +00:00
) = get<StandardKtorSerialInputData>(
2020-09-22 02:20:22 +00:00
url
).let {
2020-09-26 15:42:05 +00:00
standardKtorSerialFormat.decodeDefault(resultDeserializer, it)
2020-09-22 02:20:22 +00:00
}
2020-09-26 15:42:05 +00:00
fun <T> SerializationStrategy<T>.encodeUrlQueryValue(value: T) = standardKtorSerialFormat.encodeHex(
2020-09-22 02:20:22 +00:00
this,
value
)
suspend fun <BodyType, ResultType> HttpClient.unipost(
url: String,
bodyInfo: BodyPair<BodyType>,
resultDeserializer: DeserializationStrategy<ResultType>
2020-09-26 15:42:05 +00:00
) = post<StandardKtorSerialInputData>(url) {
body = standardKtorSerialFormat.encodeDefault(bodyInfo.first, bodyInfo.second)
2020-09-22 02:20:22 +00:00
}.let {
2020-09-26 15:42:05 +00:00
standardKtorSerialFormat.decodeDefault(resultDeserializer, it)
2020-09-22 02:20:22 +00:00
}