diff options
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.kt | 21 |
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! } |