Commit 2b770737 authored by Siret, Loic's avatar Siret, Loic
Browse files

Running ./bin/generate-samples.sh

1 merge request!7164[Kotlin] Add polymorphic support for Gson
Pipeline #489 failed with stages
Showing with 56 additions and 8 deletions
+56 -8
......@@ -64,8 +64,7 @@ import java.util.Date
{{/moshi}}
{{#gson}}
@JvmStatic
var gsonBuilder = GsonFireBuilder()
{{#models}}{{#model}}{{#discriminator}}
var gsonBuilder = GsonFireBuilder(){{#models}}{{#model}}{{#discriminator}}
.registerTypeSelector<{{classname}}>({{classname}}::class.java, TypeSelector<{{classname}}?> { readElement ->
val classByDiscriminatorValue: MutableMap<String, Any?> = HashMap()
{{#mappedModels}}
......@@ -77,8 +76,7 @@ import java.util.Date
classByDiscriminatorValue,
getDiscriminatorValue(readElement, "{{propertyName}}")) as Class<out {{classname}}?>?
} catch (ex: IllegalArgumentException) { return@TypeSelector {{classname}}::class.java}
})
{{/discriminator}}{{/model}}{{/models}}
}){{/discriminator}}{{/model}}{{/models}}
.createGsonBuilder()
.registerTypeAdapter(Date::class.java, DateAdapter())
.registerTypeAdapter(OffsetDateTime::class.java, OffsetDateTimeAdapter())
......
......@@ -30,6 +30,7 @@ test {
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
compile "com.google.code.gson:gson:2.8.6"
compile "io.gsonfire:gson-fire:1.8.0"
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
compile "com.squareup.okhttp3:okhttp:4.2.2"
testCompile "io.kotlintest:kotlintest-runner-junit5:3.1.0"
......
......@@ -2,23 +2,47 @@ package org.openapitools.client.infrastructure
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.JsonElement
import io.gsonfire.GsonFireBuilder
import io.gsonfire.TypeSelector
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.OffsetDateTime
import java.util.UUID
import org.openapitools.client.models.*
import kotlin.collections.HashMap
import kotlin.collections.MutableMap
import kotlin.collections.get
import kotlin.collections.set
import kotlin.collections.toTypedArray
import java.util.Date
object Serializer {
@JvmStatic
val gsonBuilder: GsonBuilder = GsonBuilder()
var gsonBuilder = GsonFireBuilder()
.createGsonBuilder()
.registerTypeAdapter(Date::class.java, DateAdapter())
.registerTypeAdapter(OffsetDateTime::class.java, OffsetDateTimeAdapter())
.registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter())
.registerTypeAdapter(LocalDate::class.java, LocalDateAdapter())
.registerTypeAdapter(ByteArray::class.java, ByteArrayAdapter())
@JvmStatic
val gson: Gson by lazy {
gsonBuilder.create()
}
fun getDiscriminatorValue(readElement: JsonElement, discriminatorField: String?): String? {
val element: JsonElement = readElement.getAsJsonObject().get(discriminatorField)
?: throw IllegalArgumentException("missing discriminator field: <$discriminatorField>")
return element.getAsString()
}
fun getClassByDiscriminator(
classByDiscriminatorValue: Map<*, *>,
discriminatorValue: String?
): Class<*>? {
return classByDiscriminatorValue[discriminatorValue?.toUpperCase()] as Class<*>?
?: throw IllegalArgumentException("cannot determine model class of name: <$discriminatorValue>")
}
}
......@@ -30,6 +30,7 @@ test {
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
compile "com.google.code.gson:gson:2.8.6"
compile "io.gsonfire:gson-fire:1.8.0"
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
compile "com.squareup.okhttp3:okhttp:4.2.2"
testCompile "io.kotlintest:kotlintest-runner-junit5:3.1.0"
......
......@@ -2,23 +2,47 @@ package org.openapitools.client.infrastructure
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.JsonElement
import io.gsonfire.GsonFireBuilder
import io.gsonfire.TypeSelector
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.OffsetDateTime
import java.util.UUID
import org.openapitools.client.models.*
import kotlin.collections.HashMap
import kotlin.collections.MutableMap
import kotlin.collections.get
import kotlin.collections.set
import kotlin.collections.toTypedArray
import java.util.Date
object Serializer {
@JvmStatic
val gsonBuilder: GsonBuilder = GsonBuilder()
var gsonBuilder = GsonFireBuilder()
.createGsonBuilder()
.registerTypeAdapter(Date::class.java, DateAdapter())
.registerTypeAdapter(OffsetDateTime::class.java, OffsetDateTimeAdapter())
.registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter())
.registerTypeAdapter(LocalDate::class.java, LocalDateAdapter())
.registerTypeAdapter(ByteArray::class.java, ByteArrayAdapter())
@JvmStatic
val gson: Gson by lazy {
gsonBuilder.create()
}
fun getDiscriminatorValue(readElement: JsonElement, discriminatorField: String?): String? {
val element: JsonElement = readElement.getAsJsonObject().get(discriminatorField)
?: throw IllegalArgumentException("missing discriminator field: <$discriminatorField>")
return element.getAsString()
}
fun getClassByDiscriminator(
classByDiscriminatorValue: Map<*, *>,
discriminatorValue: String?
): Class<*>? {
return classByDiscriminatorValue[discriminatorValue?.toUpperCase()] as Class<*>?
?: throw IllegalArgumentException("cannot determine model class of name: <$discriminatorValue>")
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment