summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-08-11 17:35:16 -0300
committerTorsten Grote <t@grobox.de>2020-08-11 17:35:16 -0300
commit3ab6f1569b307b155de6049ad7207e10bdf97567 (patch)
tree5fb80477e94ff8c54b7f91db7004d746dcb54151 /wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
parentd13be7c5c1be2492d38959a29e1b1c33df4938ff (diff)
downloadtaler-android-3ab6f1569b307b155de6049ad7207e10bdf97567.tar.gz
taler-android-3ab6f1569b307b155de6049ad7207e10bdf97567.tar.bz2
taler-android-3ab6f1569b307b155de6049ad7207e10bdf97567.zip
[wallet] upgrade wallet-core and adapt payment API
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt')
-rw-r--r--wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt21
1 files changed, 21 insertions, 0 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 ea8f26f..5ca2255 100644
--- a/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
+++ b/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
@@ -26,6 +26,8 @@ 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
@@ -166,6 +168,25 @@ class WalletBackendApi(
}
}
+ suspend inline fun <reified T> request(
+ operation: String,
+ mapper: ObjectMapper,
+ noinline args: (JSONObject.() -> JSONObject)? = null
+ ): WalletResponse<T> = withContext(Dispatchers.Default) {
+ suspendCoroutine<WalletResponse<T>> { cont ->
+ sendRequest(operation, args?.invoke(JSONObject())) { isError, message ->
+ val response = if (isError) {
+ val error: WalletErrorInfo = mapper.readValue(message.toString())
+ WalletResponse.Error<T>(error)
+ } else {
+ val t: T = mapper.readValue(message.toString())
+ WalletResponse.Success(t)
+ }
+ cont.resume(response)
+ }
+ }
+ }
+
fun destroy() {
// FIXME: implement this!
}