From 2ea972e77d2569ac5998d1f3c673f56097a0fefe Mon Sep 17 00:00:00 2001 From: Redume Date: Tue, 30 Apr 2024 21:15:11 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B0=D0=BF=D0=B8=D1=88=D0=BA=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=B4=D0=B3=20=D1=82.=D0=BA=20=D1=82=D0=B0=D0=BC=20=D1=84?= =?UTF-8?q?=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/network/api/FiatCurrencyServer.kt | 2 +- .../network/impl/FiatCurrencyServerImpl.kt | 5 ++- .../kotlin/su/redume/utils/JsConverter.kt | 37 +++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/su/redume/utils/JsConverter.kt diff --git a/src/main/kotlin/su/redume/core/network/api/FiatCurrencyServer.kt b/src/main/kotlin/su/redume/core/network/api/FiatCurrencyServer.kt index df31c5e..c03ba7d 100644 --- a/src/main/kotlin/su/redume/core/network/api/FiatCurrencyServer.kt +++ b/src/main/kotlin/su/redume/core/network/api/FiatCurrencyServer.kt @@ -3,5 +3,5 @@ package su.redume.core.network.api import su.redume.core.network.model.CurrencyDto interface FiatCurrencyServer { - suspend fun currency(): List + suspend fun currency(value: String, pair: String): List } \ No newline at end of file diff --git a/src/main/kotlin/su/redume/core/network/impl/FiatCurrencyServerImpl.kt b/src/main/kotlin/su/redume/core/network/impl/FiatCurrencyServerImpl.kt index 0b9a167..8abdcdb 100644 --- a/src/main/kotlin/su/redume/core/network/impl/FiatCurrencyServerImpl.kt +++ b/src/main/kotlin/su/redume/core/network/impl/FiatCurrencyServerImpl.kt @@ -8,13 +8,14 @@ import io.ktor.client.plugins.defaultRequest import io.ktor.http.* import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.request.* -import javax.inject.Inject import su.redume.core.network.api.FiatCurrencyServer import su.redume.core.network.model.CurrencyDto +import su.redume.utils.js -class FiatCurrencyServerImpl @Inject constructor() : FiatCurrencyServer { +class FiatCurrencyServerImpl : FiatCurrencyServer { private val httpClient = HttpClient { install(ContentNegotiation) { + js() json( Json { ignoreUnknownKeys = true diff --git a/src/main/kotlin/su/redume/utils/JsConverter.kt b/src/main/kotlin/su/redume/utils/JsConverter.kt new file mode 100644 index 0000000..9b1ff19 --- /dev/null +++ b/src/main/kotlin/su/redume/utils/JsConverter.kt @@ -0,0 +1,37 @@ +package su.redume.utils + +import io.ktor.http.* +import io.ktor.serialization.* +import io.ktor.util.reflect.* +import io.ktor.utils.io.* +import io.ktor.utils.io.charsets.* +import io.ktor.utils.io.jvm.javaio.* +import kotlinx.serialization.InternalSerializationApi +import kotlinx.serialization.json.Json +import kotlinx.serialization.serializer + +class JsConverter : ContentConverter { + + @OptIn(InternalSerializationApi::class) + override suspend fun deserialize( + charset: Charset, + typeInfo: TypeInfo, + content: ByteReadChannel + ): Any { + val rawJs = content.toInputStream().reader(charset).readText() + val json = rawJs + .replace("[a-z_0-9]+\\(".toRegex(), "") + .replace(");", "") + val serializer = typeInfo.type.serializer() + val jsonSerializer = Json { + ignoreUnknownKeys = true + } + return jsonSerializer.decodeFromString(serializer, json) + } + +} + +fun Configuration.js() { + val converter = JsConverter() + register(ContentType.Application.JavaScript, converter) +}