From 39dcd04750eef1581d0bdde394371ef9ca2808b9 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 24 Aug 2020 17:10:49 -0300 Subject: Get rid of Jackson and only use multi-platform serialization --- .../net/taler/wallet/backend/WalletBackendApi.kt | 36 ++++++---------------- .../net/taler/wallet/backend/WalletResponse.kt | 13 -------- 2 files changed, 10 insertions(+), 39 deletions(-) (limited to 'wallet/src/main/java/net/taler/wallet/backend') diff --git a/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt b/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt index 693fe7e..c6261bf 100644 --- a/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt +++ b/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt @@ -26,12 +26,11 @@ import android.os.IBinder import android.os.Message import android.os.Messenger import android.util.Log -import com.fasterxml.jackson.databind.ObjectMapper -import com.fasterxml.jackson.module.kotlin.readValue import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.serialization.KSerializer import kotlinx.serialization.json.Json +import net.taler.lib.android.CustomClassDiscriminator import net.taler.wallet.backend.WalletBackendService.Companion.MSG_COMMAND import net.taler.wallet.backend.WalletBackendService.Companion.MSG_NOTIFY import net.taler.wallet.backend.WalletBackendService.Companion.MSG_REPLY @@ -43,14 +42,12 @@ import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicInteger import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine +import kotlin.reflect.full.companionObjectInstance class WalletBackendApi( private val app: Application, private val notificationHandler: ((payload: JSONObject) -> Unit) ) { - private val json = Json { - ignoreUnknownKeys = true - } private var walletBackendMessenger: Messenger? = null private val queuedMessages = LinkedList() private val handlers = ConcurrentHashMap Unit>() @@ -147,12 +144,18 @@ class WalletBackendApi( } } - suspend fun request( + suspend inline fun request( operation: String, serializer: KSerializer? = null, - args: (JSONObject.() -> JSONObject)? = null + noinline args: (JSONObject.() -> JSONObject)? = null ): WalletResponse = withContext(Dispatchers.Default) { suspendCoroutine { cont -> + val json = Json { + ignoreUnknownKeys = true + (T::class.companionObjectInstance as? CustomClassDiscriminator)?.let { + classDiscriminator = it.discriminator + } + } sendRequest(operation, args?.invoke(JSONObject())) { isError, message -> val response = if (isError) { val error = json.decodeFromString(WalletErrorInfo.serializer(), message.toString()) @@ -167,25 +170,6 @@ class WalletBackendApi( } } - suspend inline fun request( - operation: String, - mapper: ObjectMapper, - noinline args: (JSONObject.() -> JSONObject)? = null - ): WalletResponse = withContext(Dispatchers.Default) { - suspendCoroutine { cont -> - sendRequest(operation, args?.invoke(JSONObject())) { isError, message -> - val response = if (isError) { - val error: WalletErrorInfo = mapper.readValue(message.toString()) - WalletResponse.Error(error) - } else { - val t: T = mapper.readValue(message.toString()) - WalletResponse.Success(t) - } - cont.resume(response) - } - } - } - fun destroy() { // FIXME: implement this! } diff --git a/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt b/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt index 57ce82e..4b39ff8 100644 --- a/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt +++ b/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt @@ -16,11 +16,6 @@ package net.taler.wallet.backend -import com.fasterxml.jackson.core.JsonParser -import com.fasterxml.jackson.databind.DeserializationContext -import com.fasterxml.jackson.databind.JsonNode -import com.fasterxml.jackson.databind.annotation.JsonDeserialize -import com.fasterxml.jackson.databind.deser.std.StdDeserializer import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -72,7 +67,6 @@ data class WalletErrorInfo( // Error details, type depends on talerErrorCode @Serializable(JSONObjectDeserializer::class) - @JsonDeserialize(using = JsonObjectDeserializer::class) val details: JSONObject? ) { val userFacingMsg: String @@ -107,10 +101,3 @@ class JSONObjectDeserializer : KSerializer { error("not supported") } } - -class JsonObjectDeserializer : StdDeserializer(JSONObject::class.java) { - override fun deserialize(p: JsonParser, ctxt: DeserializationContext): JSONObject { - val node: JsonNode = p.codec.readTree(p) - return JSONObject(node.toString()) - } -} -- cgit v1.2.3