gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-android] 01/02: [common] also support multi-platform serial


From: gnunet
Subject: [taler-taler-android] 01/02: [common] also support multi-platform serialization/deserialization
Date: Wed, 22 Jul 2020 21:53:58 +0200

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a commit to branch master
in repository taler-android.

commit b9d7d6edb7cc12e5238168c4446a28c0ae98c729
Author: Torsten Grote <t@grobox.de>
AuthorDate: Wed Jul 22 16:47:05 2020 -0300

    [common] also support multi-platform serialization/deserialization
---
 build.gradle                                       |  1 +
 merchant-lib/build.gradle                          | 14 +++++++------
 taler-kotlin-common/build.gradle                   | 10 +++++++---
 .../src/main/java/net/taler/common/Amount.kt       | 17 ++++++++++++++++
 .../main/java/net/taler/common/ContractTerms.kt    | 23 ++++++++++++++++------
 5 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/build.gradle b/build.gradle
index 3067d22..dc530bf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,6 +11,7 @@ buildscript {
     dependencies {
         classpath 'com.android.tools.build:gradle:4.0.1'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
         classpath 
"androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
     }
 }
diff --git a/merchant-lib/build.gradle b/merchant-lib/build.gradle
index 08da35d..93e2d4d 100644
--- a/merchant-lib/build.gradle
+++ b/merchant-lib/build.gradle
@@ -15,13 +15,12 @@
  */
 
 plugins {
-    id 'org.jetbrains.kotlin.plugin.serialization' version "$kotlin_version"
+    id 'com.android.library'
+    id 'kotlin-android'
+    id 'kotlin-android-extensions'
+    id 'kotlinx-serialization'
 }
 
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
-
 android {
     compileSdkVersion 29
     //noinspection GradleDependency
@@ -46,6 +45,8 @@ android {
 }
 
 dependencies {
+    implementation project(":taler-kotlin-common")
+
     implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
 
     def ktor_version = "1.3.2"
@@ -54,5 +55,6 @@ dependencies {
     implementation "io.ktor:ktor-client-serialization-jvm:$ktor_version"
 
     testImplementation 'junit:junit:4.13'
-    testApi "io.ktor:ktor-client-mock-jvm:$ktor_version"
+    testImplementation "io.ktor:ktor-client-mock-jvm:$ktor_version"
+    testImplementation "io.ktor:ktor-client-logging-jvm:$ktor_version"
 }
diff --git a/taler-kotlin-common/build.gradle b/taler-kotlin-common/build.gradle
index 573a329..df4b65f 100644
--- a/taler-kotlin-common/build.gradle
+++ b/taler-kotlin-common/build.gradle
@@ -14,9 +14,12 @@
  * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
+plugins {
+    id 'com.android.library'
+    id 'kotlin-android'
+    id 'kotlin-android-extensions'
+    id 'kotlinx-serialization'
+}
 
 android {
     compileSdkVersion 29
@@ -59,6 +62,7 @@ dependencies {
     implementation 'com.google.zxing:core:3.4.0'  // needs minSdkVersion 24+
 
     // JSON parsing and serialization
+    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0"
     implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.10.2"
 
     lintChecks 'com.github.thirdegg:lint-rules:0.0.4-alpha'
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())
diff --git 
a/taler-kotlin-common/src/main/java/net/taler/common/ContractTerms.kt 
b/taler-kotlin-common/src/main/java/net/taler/common/ContractTerms.kt
index 8b8e02d..c07127a 100644
--- a/taler-kotlin-common/src/main/java/net/taler/common/ContractTerms.kt
+++ b/taler-kotlin-common/src/main/java/net/taler/common/ContractTerms.kt
@@ -23,13 +23,20 @@ import com.fasterxml.jackson.annotation.JsonInclude
 import com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY
 import com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL
 import com.fasterxml.jackson.annotation.JsonProperty
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
 import net.taler.common.TalerUtils.getLocalizedString
 
+@Serializable
 @JsonIgnoreProperties(ignoreUnknown = true)
 data class ContractTerms(
     val summary: String,
-    val products: List<ContractProduct>,
-    val amount: Amount
+    @SerialName("summary_i18n")
+    val summaryI18n: Map<String, String>? = null,
+    val amount: Amount,
+    @SerialName("fulfillment_url")
+    val fulfillmentUrl: String,
+    val products: List<ContractProduct>
 )
 
 @JsonInclude(NON_NULL)
@@ -52,13 +59,17 @@ abstract class Product {
         get() = getLocalizedString(descriptionI18n, description)
 }
 
+@Serializable
 data class ContractProduct(
-    override val productId: String?,
+    @SerialName("product_id")
+    override val productId: String? = null,
     override val description: String,
-    override val descriptionI18n: Map<String, String>?,
+    @SerialName("description_i18n")
+    override val descriptionI18n: Map<String, String>? = null,
     override val price: Amount,
-    override val location: String?,
-    override val image: String?,
+    @SerialName("delivery_location")
+    override val location: String? = null,
+    override val image: String? = null,
     val quantity: Int
 ) : Product() {
     @get:JsonIgnore

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]