mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-09-14 13:01:13 +00:00
partially implemented ktor utils
This commit is contained in:
16
ktor/common/build.gradle
Normal file
16
ktor/common/build.gradle
Normal file
@@ -0,0 +1,16 @@
|
||||
plugins {
|
||||
id "org.jetbrains.kotlin.multiplatform"
|
||||
id "org.jetbrains.kotlin.plugin.serialization"
|
||||
}
|
||||
|
||||
apply from: "$mppProjectWithSerializationPresetPath"
|
||||
|
||||
kotlin {
|
||||
sourceSets {
|
||||
commonMain {
|
||||
dependencies {
|
||||
api "com.soywiz.korlibs.klock:klock:$klockVersion"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,23 @@
|
||||
package dev.inmo.micro_utils.ktor.common
|
||||
|
||||
fun buildStandardUrl(
|
||||
basePart: String,
|
||||
subpart: String,
|
||||
parameters: QueryParams = emptyMap()
|
||||
) = "$basePart/$subpart".includeQueryParams(
|
||||
parameters
|
||||
)
|
||||
|
||||
fun buildStandardUrl(
|
||||
basePart: String,
|
||||
subpart: String,
|
||||
parameters: List<QueryParam>
|
||||
) = "$basePart/$subpart".includeQueryParams(
|
||||
parameters
|
||||
)
|
||||
|
||||
fun buildStandardUrl(
|
||||
basePart: String,
|
||||
subpart: String,
|
||||
vararg parameters: QueryParam
|
||||
) = buildStandardUrl(basePart, subpart, parameters.toList())
|
@@ -0,0 +1,6 @@
|
||||
package dev.inmo.micro_utils.ktor.common
|
||||
|
||||
import kotlinx.serialization.builtins.SetSerializer
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
|
||||
val setIdsSerializer = SetSerializer(String.serializer())
|
@@ -0,0 +1,3 @@
|
||||
package dev.inmo.micro_utils.ktor.common
|
||||
|
||||
object CorrectCloseException : Exception()
|
@@ -0,0 +1,14 @@
|
||||
package dev.inmo.micro_utils.ktor.common
|
||||
|
||||
private val schemaRegex = Regex("[^:]*//")
|
||||
|
||||
val String.asCorrectWebSocketUrl: String
|
||||
get() = if (startsWith("ws")) {
|
||||
this
|
||||
} else {
|
||||
if (contains("://")) {
|
||||
replace(schemaRegex, "ws://")
|
||||
} else {
|
||||
"ws://$this"
|
||||
}
|
||||
}
|
@@ -0,0 +1,17 @@
|
||||
package dev.inmo.micro_utils.ktor.common
|
||||
|
||||
import com.soywiz.klock.DateTime
|
||||
|
||||
typealias FromToDateTime = Pair<DateTime?, DateTime?>
|
||||
|
||||
val FromToDateTime.asFromToUrlPart: QueryParams
|
||||
get() = mapOf(
|
||||
"from" to first ?.unixMillis ?.toString(),
|
||||
"to" to second ?.unixMillis ?.toString()
|
||||
)
|
||||
|
||||
val QueryParams.extractFromToDateTime: FromToDateTime
|
||||
get() = FromToDateTime(
|
||||
get("from") ?.toDoubleOrNull() ?.let { DateTime(it) },
|
||||
get("to") ?.toDoubleOrNull() ?.let { DateTime(it) }
|
||||
)
|
@@ -0,0 +1,25 @@
|
||||
package dev.inmo.micro_utils.ktor.common
|
||||
|
||||
typealias QueryParam = Pair<String, String?>
|
||||
typealias QueryParams = Map<String, String?>
|
||||
|
||||
val QueryParams.asUrlQuery: String
|
||||
get() = keys.joinToString("&") { "${it}${get(it) ?.let { value -> "=$value" }}" }
|
||||
|
||||
val List<QueryParam>.asUrlQuery: String
|
||||
get() = joinToString("&") { (key, value) -> "${key}${value ?.let { _ -> "=$value" }}" }
|
||||
|
||||
fun String.includeQueryParams(
|
||||
queryParams: QueryParams
|
||||
): String = "$this${if (contains("?")) "&" else "?"}${queryParams.asUrlQuery}"
|
||||
|
||||
fun String.includeQueryParams(
|
||||
queryParams: List<QueryParam>
|
||||
): String = "$this${if (contains("?")) "&" else "?"}${queryParams.asUrlQuery}"
|
||||
|
||||
val String.parseUrlQuery: QueryParams
|
||||
get() = split("&").map {
|
||||
it.split("=").let { pair ->
|
||||
pair.first() to pair.getOrNull(1)
|
||||
}
|
||||
}.toMap()
|
@@ -0,0 +1,5 @@
|
||||
package dev.inmo.micro_utils.ktor.common
|
||||
|
||||
import kotlinx.serialization.cbor.Cbor
|
||||
|
||||
val standardKtorSerialFormat = Cbor
|
@@ -0,0 +1,7 @@
|
||||
package dev.inmo.micro_utils.ktor.common
|
||||
|
||||
const val clientWebsocketHelloMessage = "Start getting of updates"
|
||||
const val serverWebsocketHelloMessage = "Accepted"
|
||||
|
||||
const val serverWebsocketNewMessageMessage = "NewMessage"
|
||||
const val websocketFinalizationMessage = "Final"
|
Reference in New Issue
Block a user