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) +}