taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit 2d9cd67b9952e4915e4bf23ac645ff7d2c9edaff
parent 271fceac1ed7245fbbd2b41cb595080f0e0afb93
Author: Iván Ávalos <avalos@disroot.org>
Date:   Thu,  2 Mar 2023 20:57:29 -0600

[wallet] Implemented JSON serializer for TalerErrorCode

bug 0007606

Diffstat:
Mwallet/src/main/java/net/taler/wallet/backend/WalletResponse.kt | 14+++++++++++---
1 file changed, 11 insertions(+), 3 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 @@ -26,6 +26,9 @@ import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.JsonDecoder import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive +import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.jsonPrimitive @Serializable @@ -53,7 +56,7 @@ sealed class WalletResponse<T> { } } -@Serializable(with = TalerErrorInfoDeserializer::class) +@Serializable(with = TalerErrorInfoSerializer::class) data class TalerErrorInfo( // Numeric error code defined defined in the // GANA gnu-taler-error-codes registry. @@ -81,7 +84,7 @@ data class TalerErrorInfo( extra[key]?.jsonPrimitive?.content } -class TalerErrorInfoDeserializer : KSerializer<TalerErrorInfo> { +class TalerErrorInfoSerializer : KSerializer<TalerErrorInfo> { private val stringToJsonElementSerializer = MapSerializer(String.serializer(), JsonElement.serializer()) override val descriptor: SerialDescriptor @@ -110,6 +113,11 @@ class TalerErrorInfoDeserializer : KSerializer<TalerErrorInfo> { } override fun serialize(encoder: Encoder, value: TalerErrorInfo) { - error("not supported") + encoder.encodeSerializableValue(JsonObject.serializer(), buildJsonObject { + put("code", JsonPrimitive(value.code.code)) + put("hint", JsonPrimitive(value.hint)) + put("message", JsonPrimitive(value.message)) + value.extra.forEach { (key, value) -> put(key, value) } + }) } }