more annotations to god of annotations

This commit is contained in:
2020-10-15 00:26:37 +06:00
parent f44174b5b3
commit f8a8808508
53 changed files with 227 additions and 10 deletions

View File

@@ -8,11 +8,13 @@ import io.ktor.http.cio.websocket.*
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.channelFlow
import kotlinx.serialization.DeserializationStrategy
import kotlin.js.JsExport
/**
* @param checkReconnection This lambda will be called when it is required to reconnect to websocket to establish
* connection. Must return true in case if must be reconnected. By default always reconnecting
*/
@JsExport
inline fun <T> HttpClient.createStandardWebsocketFlow(
url: String,
crossinline checkReconnection: (Throwable?) -> Boolean = { true },
@@ -60,6 +62,7 @@ inline fun <T> HttpClient.createStandardWebsocketFlow(
* @param checkReconnection This lambda will be called when it is required to reconnect to websocket to establish
* connection. Must return true in case if must be reconnected. By default always reconnecting
*/
@JsExport
inline fun <T> HttpClient.createStandardWebsocketFlow(
url: String,
crossinline checkReconnection: (Throwable?) -> Boolean = { true },

View File

@@ -5,9 +5,11 @@ import io.ktor.client.HttpClient
import io.ktor.client.request.get
import io.ktor.client.request.post
import kotlinx.serialization.*
import kotlin.js.JsExport
typealias BodyPair<T> = Pair<SerializationStrategy<T>, T>
@JsExport
suspend fun <ResultType> HttpClient.uniget(
url: String,
resultDeserializer: DeserializationStrategy<ResultType>
@@ -18,11 +20,13 @@ suspend fun <ResultType> HttpClient.uniget(
}
@JsExport
fun <T> SerializationStrategy<T>.encodeUrlQueryValue(value: T) = standardKtorSerialFormat.encodeHex(
this,
value
)
@JsExport
suspend fun <BodyType, ResultType> HttpClient.unipost(
url: String,
bodyInfo: BodyPair<BodyType>,

View File

@@ -1,5 +1,8 @@
package dev.inmo.micro_utils.ktor.common
import kotlin.js.JsExport
@JsExport
fun buildStandardUrl(
basePart: String,
subpart: String,
@@ -8,6 +11,7 @@ fun buildStandardUrl(
parameters
)
@JsExport
fun buildStandardUrl(
basePart: String,
subpart: String,
@@ -16,6 +20,7 @@ fun buildStandardUrl(
parameters
)
@JsExport
fun buildStandardUrl(
basePart: String,
subpart: String,

View File

@@ -1,3 +1,7 @@
package dev.inmo.micro_utils.ktor.common
import kotlin.js.JsExport
@JsExport
@Deprecated("Will be removed in next major release as useless")
object CorrectCloseException : Exception()

View File

@@ -1,7 +1,10 @@
package dev.inmo.micro_utils.ktor.common
import kotlin.js.JsExport
private val schemaRegex = Regex("^[^:]*://")
@JsExport
val String.asCorrectWebSocketUrl: String
get() = if (startsWith("ws")) {
this

View File

@@ -1,15 +1,18 @@
package dev.inmo.micro_utils.ktor.common
import com.soywiz.klock.DateTime
import kotlin.js.JsExport
typealias FromToDateTime = Pair<DateTime?, DateTime?>
@JsExport
val FromToDateTime.asFromToUrlPart: QueryParams
get() = mapOf(
"from" to first ?.unixMillis ?.toString(),
"to" to second ?.unixMillis ?.toString()
)
@JsExport
val QueryParams.extractFromToDateTime: FromToDateTime
get() = FromToDateTime(
get("from") ?.toDoubleOrNull() ?.let { DateTime(it) },

View File

@@ -1,22 +1,29 @@
package dev.inmo.micro_utils.ktor.common
import kotlin.js.JsExport
typealias QueryParam = Pair<String, String?>
typealias QueryParams = Map<String, String?>
@JsExport
val QueryParams.asUrlQuery: String
get() = keys.joinToString("&") { "${it}${get(it) ?.let { value -> "=$value" }}" }
@JsExport
val List<QueryParam>.asUrlQuery: String
get() = joinToString("&") { (key, value) -> "${key}${value ?.let { _ -> "=$value" }}" }
@JsExport
fun String.includeQueryParams(
queryParams: QueryParams
): String = "$this${if(queryParams.isNotEmpty()) "${if (contains("?")) "&" else "?"}${queryParams.asUrlQuery}" else ""}"
@JsExport
fun String.includeQueryParams(
queryParams: List<QueryParam>
): String = "$this${if (contains("?")) "&" else "?"}${queryParams.asUrlQuery}"
@JsExport
val String.parseUrlQuery: QueryParams
get() = split("&").map {
it.split("=").let { pair ->

View File

@@ -2,28 +2,36 @@ package dev.inmo.micro_utils.ktor.common
import kotlinx.serialization.*
import kotlinx.serialization.cbor.Cbor
import kotlin.js.JsExport
typealias StandardKtorSerialFormat = BinaryFormat
typealias StandardKtorSerialInputData = ByteArray
@JsExport
val standardKtorSerialFormat: StandardKtorSerialFormat = Cbor { }
@JsExport
inline fun <T> StandardKtorSerialFormat.decodeDefault(
deserializationStrategy: DeserializationStrategy<T>,
input: StandardKtorSerialInputData
): T = decodeFromByteArray(deserializationStrategy, input)
@JsExport
inline fun <T> StandardKtorSerialFormat.encodeDefault(
serializationStrategy: SerializationStrategy<T>,
data: T
): StandardKtorSerialInputData = encodeToByteArray(serializationStrategy, data)
@JsExport
@Deprecated("Will be removed in next major release due to useless")
val cbor = Cbor {}
@JsExport
inline fun <T> StandardKtorSerialFormat.decodeHex(
deserializationStrategy: DeserializationStrategy<T>,
input: String
): T = decodeFromHexString(deserializationStrategy, input)
@JsExport
inline fun <T> StandardKtorSerialFormat.encodeHex(
serializationStrategy: SerializationStrategy<T>,
data: T

View File

@@ -9,13 +9,6 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import kotlinx.serialization.SerializationStrategy
private suspend fun DefaultWebSocketSession.checkReceivedAndCloseIfExists() {
if (incoming.poll() != null) {
close()
throw CorrectCloseException
}
}
fun <T> Route.includeWebsocketHandling(
suburl: String,
flow: Flow<T>,