summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/backend
diff options
context:
space:
mode:
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/backend')
-rw-r--r--wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt36
-rw-r--r--wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt13
2 files changed, 10 insertions, 39 deletions
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<Message>()
private val handlers = ConcurrentHashMap<Int, (isError: Boolean, message: JSONObject) -> Unit>()
@@ -147,12 +144,18 @@ class WalletBackendApi(
}
}
- suspend fun <T> request(
+ suspend inline fun <reified T> request(
operation: String,
serializer: KSerializer<T>? = null,
- args: (JSONObject.() -> JSONObject)? = null
+ noinline args: (JSONObject.() -> JSONObject)? = null
): WalletResponse<T> = 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 <reified T> request(
- operation: String,
- mapper: ObjectMapper,
- noinline args: (JSONObject.() -> JSONObject)? = null
- ): WalletResponse<T> = 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<JSONObject> {
error("not supported")
}
}
-
-class JsonObjectDeserializer : StdDeserializer<JSONObject>(JSONObject::class.java) {
- override fun deserialize(p: JsonParser, ctxt: DeserializationContext): JSONObject {
- val node: JsonNode = p.codec.readTree(p)
- return JSONObject(node.toString())
- }
-}