Skip to content
GitLab
Explore
Projects
Groups
Snippets
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenAPI Tools
openapi-generator
Commits
2b770737
Commit
2b770737
authored
4 years ago
by
Siret, Loic
Browse files
Options
Download
Email Patches
Plain Diff
Running ./bin/generate-samples.sh
parent
541a75a1
github/fork/loicsiret/kotlin-add-gson-polymorphic
1 merge request
!7164
[Kotlin] Add polymorphic support for Gson
Pipeline
#489
failed with stages
Changes
5
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache
+2
-4
...n-client/jvm-common/infrastructure/Serializer.kt.mustache
samples/client/petstore/kotlin-gson/build.gradle
+1
-0
samples/client/petstore/kotlin-gson/build.gradle
samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+26
-2
...tlin/org/openapitools/client/infrastructure/Serializer.kt
samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle
+1
-0
...lient/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle
samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+26
-2
...tlin/org/openapitools/client/infrastructure/Serializer.kt
with
56 additions
and
8 deletions
+56
-8
modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache
+
2
-
4
View file @
2b770737
...
...
@@ -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())
...
...
This diff is collapsed.
Click to expand it.
samples/client/petstore/kotlin-gson/build.gradle
+
1
-
0
View file @
2b770737
...
...
@@ -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"
...
...
This diff is collapsed.
Click to expand it.
samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+
26
-
2
View file @
2b770737
...
...
@@ -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>"
)
}
}
This diff is collapsed.
Click to expand it.
samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle
+
1
-
0
View file @
2b770737
...
...
@@ -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"
...
...
This diff is collapsed.
Click to expand it.
samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+
26
-
2
View file @
2b770737
...
...
@@ -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>"
)
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Snippets