aboutsummaryrefslogtreecommitdiff
path: root/taler-kotlin-android
diff options
context:
space:
mode:
Diffstat (limited to 'taler-kotlin-android')
-rw-r--r--taler-kotlin-android/build.gradle2
-rw-r--r--taler-kotlin-android/src/main/java/net/taler/common/ContractTerms.kt18
-rw-r--r--taler-kotlin-android/src/main/java/net/taler/lib/android/Serialization.kt21
-rw-r--r--taler-kotlin-android/src/main/java/net/taler/lib/common/AmountMixin.kt51
-rw-r--r--taler-kotlin-android/src/main/java/net/taler/lib/common/TimestampMixin.kt39
-rw-r--r--taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt21
6 files changed, 29 insertions, 123 deletions
diff --git a/taler-kotlin-android/build.gradle b/taler-kotlin-android/build.gradle
index 5cb0b0e..6d992a0 100644
--- a/taler-kotlin-android/build.gradle
+++ b/taler-kotlin-android/build.gradle
@@ -67,8 +67,6 @@ dependencies {
// JSON parsing and serialization
api "org.jetbrains.kotlinx:kotlinx-serialization-core:1.0.0-RC"
- implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.10.2"
- implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
lintPublish 'com.github.thirdegg:lint-rules:0.0.4-alpha'
diff --git a/taler-kotlin-android/src/main/java/net/taler/common/ContractTerms.kt b/taler-kotlin-android/src/main/java/net/taler/common/ContractTerms.kt
index 8bf77e8..2c50fa9 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/ContractTerms.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/common/ContractTerms.kt
@@ -17,10 +17,6 @@
package net.taler.common
import androidx.annotation.RequiresApi
-import com.fasterxml.jackson.annotation.JsonIgnore
-import com.fasterxml.jackson.annotation.JsonInclude
-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
@@ -31,36 +27,24 @@ import net.taler.lib.common.Timestamp
data class ContractTerms(
val summary: String,
@SerialName("summary_i18n")
- @get:JsonProperty("summary_i18n")
val summaryI18n: Map<String, String>? = null,
val amount: Amount,
@SerialName("fulfillment_url")
- @get:JsonProperty("fulfillment_url")
val fulfillmentUrl: String,
val products: List<ContractProduct>,
@SerialName("wire_transfer_deadline")
- @get:JsonProperty("wire_transfer_deadline")
val wireTransferDeadline: Timestamp? = null,
@SerialName("refund_deadline")
- @get:JsonProperty("refund_deadline")
val refundDeadline: Timestamp? = null
)
-@JsonInclude(NON_NULL)
abstract class Product {
- @get:JsonProperty("product_id")
abstract val productId: String?
abstract val description: String
-
- @get:JsonProperty("description_i18n")
abstract val descriptionI18n: Map<String, String>?
abstract val price: Amount
-
- @get:JsonProperty("delivery_location")
abstract val location: String?
abstract val image: String?
-
- @get:JsonIgnore
val localizedDescription: String
@RequiresApi(26)
get() = getLocalizedString(descriptionI18n, description)
@@ -79,12 +63,12 @@ data class ContractProduct(
override val image: String? = null,
val quantity: Int
) : Product() {
- @get:JsonIgnore
val totalPrice: Amount by lazy {
price * quantity
}
}
+@Serializable
data class ContractMerchant(
val name: String
)
diff --git a/taler-kotlin-android/src/main/java/net/taler/lib/android/Serialization.kt b/taler-kotlin-android/src/main/java/net/taler/lib/android/Serialization.kt
new file mode 100644
index 0000000..7eb4480
--- /dev/null
+++ b/taler-kotlin-android/src/main/java/net/taler/lib/android/Serialization.kt
@@ -0,0 +1,21 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.lib.android
+
+interface CustomClassDiscriminator {
+ val discriminator: String
+}
diff --git a/taler-kotlin-android/src/main/java/net/taler/lib/common/AmountMixin.kt b/taler-kotlin-android/src/main/java/net/taler/lib/common/AmountMixin.kt
deleted file mode 100644
index 59285b6..0000000
--- a/taler-kotlin-android/src/main/java/net/taler/lib/common/AmountMixin.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * This file is part of GNU Taler
- * (C) 2020 Taler Systems S.A.
- *
- * GNU Taler is free software; you can redistribute it and/or modify it under the
- * terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 3, or (at your option) any later version.
- *
- * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-package net.taler.lib.common
-
-import com.fasterxml.jackson.core.JsonGenerator
-import com.fasterxml.jackson.core.JsonParser
-import com.fasterxml.jackson.databind.DeserializationContext
-import com.fasterxml.jackson.databind.JsonMappingException
-import com.fasterxml.jackson.databind.SerializerProvider
-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
-
-/**
- * Used to support Jackson serialization along with KotlinX.
- */
-@JsonSerialize(using = AmountSerializer::class)
-@JsonDeserialize(using = AmountDeserializer::class)
-abstract class AmountMixin
-
-class AmountSerializer : StdSerializer<Amount>(Amount::class.java) {
- override fun serialize(value: Amount, gen: JsonGenerator, provider: SerializerProvider) {
- gen.writeString(value.toJSONString())
- }
-}
-
-class AmountDeserializer : StdDeserializer<Amount>(Amount::class.java) {
- override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Amount {
- val node = p.codec.readValue(p, String::class.java)
- try {
- return Amount.fromJSONString(node)
- } catch (e: AmountParserException) {
- throw JsonMappingException(p, "Error parsing Amount", e)
- }
- }
-}
diff --git a/taler-kotlin-android/src/main/java/net/taler/lib/common/TimestampMixin.kt b/taler-kotlin-android/src/main/java/net/taler/lib/common/TimestampMixin.kt
deleted file mode 100644
index 40c03f6..0000000
--- a/taler-kotlin-android/src/main/java/net/taler/lib/common/TimestampMixin.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * This file is part of GNU Taler
- * (C) 2020 Taler Systems S.A.
- *
- * GNU Taler is free software; you can redistribute it and/or modify it under the
- * terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 3, or (at your option) any later version.
- *
- * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-package net.taler.lib.common
-
-import com.fasterxml.jackson.annotation.JsonProperty
-import com.fasterxml.jackson.core.JsonParser
-import com.fasterxml.jackson.databind.DeserializationContext
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize
-import com.fasterxml.jackson.databind.deser.std.StdDeserializer
-
-/**
- * Used to support Jackson serialization along with KotlinX.
- */
-abstract class TimestampMixin(
- @get:JsonDeserialize(using = NeverDeserializer::class)
- @get:JsonProperty("t_ms")
- val ms: Long
-)
-
-class NeverDeserializer : StdDeserializer<Long>(Long::class.java) {
- override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Long {
- return if (p.text == "never") -1
- else p.longValue
- }
-}
diff --git a/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt b/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
index 0e410ca..3a2cdb4 100644
--- a/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
+++ b/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
@@ -16,28 +16,21 @@
package net.taler.common
-import com.fasterxml.jackson.databind.DeserializationFeature
-import com.fasterxml.jackson.databind.ObjectMapper
-import com.fasterxml.jackson.module.kotlin.KotlinModule
-import com.fasterxml.jackson.module.kotlin.readValue
-import net.taler.lib.common.Amount
-import net.taler.lib.common.AmountMixin
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
import net.taler.lib.common.Timestamp
-import net.taler.lib.common.TimestampMixin
import org.junit.Assert.assertEquals
import org.junit.Test
class ContractTermsTest {
- private val mapper = ObjectMapper()
- .registerModule(KotlinModule())
- .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
- .addMixIn(Amount::class.java, AmountMixin::class.java)
- .addMixIn(Timestamp::class.java, TimestampMixin::class.java)
+ private val json = Json {
+ ignoreUnknownKeys = true
+ }
@Test
fun test() {
- val json = """
+ val jsonStr = """
{
"amount":"TESTKUDOS:0.5",
"extra":{
@@ -72,7 +65,7 @@ class ContractTermsTest {
"nonce":"FK8ZKJRV6VX6YFAG4CDSC6W0DWD084Q09DP81ANF30GRFQYM2KPG"
}
""".trimIndent()
- val contractTerms: ContractTerms = mapper.readValue(json)
+ val contractTerms: ContractTerms = json.decodeFromString(jsonStr)
assertEquals("Essay: 1. The Free Software Definition", contractTerms.summary)
assertEquals(Timestamp.never(), contractTerms.refundDeadline)
}