diff options
author | Torsten Grote <t@grobox.de> | 2020-08-11 17:35:16 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2020-08-11 17:35:16 -0300 |
commit | 3ab6f1569b307b155de6049ad7207e10bdf97567 (patch) | |
tree | 5fb80477e94ff8c54b7f91db7004d746dcb54151 /wallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt | |
parent | d13be7c5c1be2492d38959a29e1b1c33df4938ff (diff) | |
download | taler-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.kt | 45 |
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()) + } +} |