diff options
author | Torsten Grote <t@grobox.de> | 2020-07-22 16:47:05 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2020-07-22 16:47:05 -0300 |
commit | b9d7d6edb7cc12e5238168c4446a28c0ae98c729 (patch) | |
tree | d462a3c4487a017956e684028ecc5ae5b69919a1 /taler-kotlin-common/src/main/java/net/taler/common/Amount.kt | |
parent | 4bd0b7a75344b08cf5f84c360a28fc3f575b8501 (diff) | |
download | taler-android-b9d7d6edb7cc12e5238168c4446a28c0ae98c729.tar.gz taler-android-b9d7d6edb7cc12e5238168c4446a28c0ae98c729.tar.bz2 taler-android-b9d7d6edb7cc12e5238168c4446a28c0ae98c729.zip |
[common] also support multi-platform serialization/deserialization
Diffstat (limited to 'taler-kotlin-common/src/main/java/net/taler/common/Amount.kt')
-rw-r--r-- | taler-kotlin-common/src/main/java/net/taler/common/Amount.kt | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/taler-kotlin-common/src/main/java/net/taler/common/Amount.kt b/taler-kotlin-common/src/main/java/net/taler/common/Amount.kt index 76cd294..992f93b 100644 --- a/taler-kotlin-common/src/main/java/net/taler/common/Amount.kt +++ b/taler-kotlin-common/src/main/java/net/taler/common/Amount.kt @@ -26,6 +26,11 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize import com.fasterxml.jackson.databind.annotation.JsonSerialize import com.fasterxml.jackson.databind.deser.std.StdDeserializer import com.fasterxml.jackson.databind.ser.std.StdSerializer +import kotlinx.serialization.Decoder +import kotlinx.serialization.Encoder +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.Serializer import org.json.JSONObject import java.lang.Math.floorDiv import kotlin.math.pow @@ -34,6 +39,7 @@ import kotlin.math.roundToInt class AmountParserException(msg: String? = null, cause: Throwable? = null) : Exception(msg, cause) class AmountOverflowException(msg: String? = null, cause: Throwable? = null) : Exception(msg, cause) +@Serializable(with = KotlinXAmountSerializer::class) @JsonSerialize(using = AmountSerializer::class) @JsonDeserialize(using = AmountDeserializer::class) data class Amount( @@ -211,6 +217,17 @@ data class Amount( } +@Serializer(forClass = Amount::class) +object KotlinXAmountSerializer: KSerializer<Amount> { + override fun serialize(encoder: Encoder, value: Amount) { + encoder.encodeString(value.toJSONString()) + } + + override fun deserialize(decoder: Decoder): Amount { + return Amount.fromJSONString(decoder.decodeString()) + } +} + class AmountSerializer : StdSerializer<Amount>(Amount::class.java) { override fun serialize(value: Amount, gen: JsonGenerator, provider: SerializerProvider) { gen.writeString(value.toJSONString()) |