From 2d9cd67b9952e4915e4bf23ac645ff7d2c9edaff Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Thu, 2 Mar 2023 20:57:29 -0600 Subject: [wallet] Implemented JSON serializer for TalerErrorCode bug 0007606 --- .../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 index 22dcba9..37bf91e 100644 --- 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 { } } -@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 { +class TalerErrorInfoSerializer : KSerializer { private val stringToJsonElementSerializer = MapSerializer(String.serializer(), JsonElement.serializer()) override val descriptor: SerialDescriptor @@ -110,6 +113,11 @@ class TalerErrorInfoDeserializer : KSerializer { } 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) } + }) } } -- cgit v1.2.3