From bbbd34a8de7830622a3c29198de3cd45eed28ca5 Mon Sep 17 00:00:00 2001 From: stevenyomi <95685115+stevenyomi@users.noreply.github.com> Date: Wed, 8 Feb 2023 11:10:28 +0800 Subject: [PATCH] Tweak Response.parseAs() to utilize intrinsics (#9047) (cherry picked from commit 0d8f1c8560c5d65712d1656856ab33b6de0adb09) # Conflicts: # core/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt --- .../eu/kanade/tachiyomi/network/OkHttpExtensions.kt | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt b/core/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt index 3476fdb92..65d8ab5a2 100755 --- a/core/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt @@ -2,8 +2,8 @@ package eu.kanade.tachiyomi.network import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.ExperimentalSerializationApi -import kotlinx.serialization.KSerializer import kotlinx.serialization.json.Json import kotlinx.serialization.json.okio.decodeFromBufferedSource import kotlinx.serialization.serializer @@ -21,8 +21,6 @@ import uy.kohesive.injekt.api.get import java.io.IOException import java.util.concurrent.atomic.AtomicBoolean import kotlin.coroutines.resumeWithException -import kotlin.reflect.KType -import kotlin.reflect.typeOf val jsonMime = "application/json; charset=utf-8".toMediaType() @@ -134,13 +132,11 @@ fun OkHttpClient.newCachelessCallWithProgress(request: Request, listener: Progre } inline fun Response.parseAs(/* SY --> */json: Json = Injekt.get()/* SY <-- */): T { - return internalParseAs(typeOf(), this, /* SY --> */ json /* SY <-- */) + return decodeFromJsonResponse(serializer(), this, /* SY --> */ json /* SY <-- */) } -@Suppress("UNCHECKED_CAST") @OptIn(ExperimentalSerializationApi::class) -fun internalParseAs(type: KType, response: Response, /* SY --> */ json: Json /* SY <-- */): T { - val deserializer = serializer(type) as KSerializer +fun decodeFromJsonResponse(deserializer: DeserializationStrategy, response: Response, /* SY --> */ json: Json /* SY <-- */): T { return response.body.source().use { json.decodeFromBufferedSource(deserializer, it) }