summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.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/WalletResponse.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/WalletResponse.kt')
-rw-r--r--wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt45
1 files changed, 40 insertions, 5 deletions
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 05a53f3..ab3d42e 100644
--- a/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt
+++ b/wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt
@@ -16,10 +16,23 @@
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.Decoder
+import kotlinx.serialization.Encoder
+import kotlinx.serialization.KSerializer
+import kotlinx.serialization.PrimitiveDescriptor
+import kotlinx.serialization.PrimitiveKind.STRING
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.JsonInput
+import kotlinx.serialization.json.JsonObject
import org.json.JSONObject
+
@Serializable
sealed class WalletResponse<T> {
@Serializable
@@ -58,9 +71,10 @@ data class WalletErrorInfo(
// for the instance of the error.
val message: String,
- // Error details, type depends
- // on talerErrorCode
- val details: String?
+ // Error details, type depends on talerErrorCode
+ @Serializable(JSONObjectDeserializer::class)
+ @JsonDeserialize(using = JsonObjectDeserializer::class)
+ val details: JSONObject?
) {
val userFacingMsg: String
get() {
@@ -68,8 +82,7 @@ data class WalletErrorInfo(
append(talerErrorCode)
append(" ")
append(message)
- details?.let { it ->
- val details = JSONObject(it)
+ details?.let { details ->
details.optJSONObject("errorResponse")?.let { errorResponse ->
append("\n\n")
append(errorResponse.optString("code"))
@@ -80,3 +93,25 @@ data class WalletErrorInfo(
}.toString()
}
}
+
+class JSONObjectDeserializer : KSerializer<JSONObject> {
+
+ override val descriptor = PrimitiveDescriptor("JSONObjectDeserializer", STRING)
+
+ override fun deserialize(decoder: Decoder): JSONObject {
+ val input = decoder as JsonInput
+ val tree = input.decodeJson() as JsonObject
+ return JSONObject(tree.toString())
+ }
+
+ override fun serialize(encoder: Encoder, value: 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())
+ }
+}