Skip to content

Commit da58d10

Browse files
authored
Merge pull request #186 from Ecwid/parsed-response-with-ext-deserialization
Added GSON deserializer for ParsedResponseWithExt class
2 parents 720e148 + a0e3e3f commit da58d10

3 files changed

Lines changed: 66 additions & 0 deletions

File tree

src/main/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformer.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package com.ecwid.apiclient.v3.jsontransformer.gson
22

33
import com.ecwid.apiclient.v3.dto.product.result.GetProductFiltersResult.ProductFilters
44
import com.ecwid.apiclient.v3.exception.JsonDeserializationException
5+
import com.ecwid.apiclient.v3.impl.ParsedResponseWithExt
56
import com.ecwid.apiclient.v3.jsontransformer.JsonTransformer
67
import com.ecwid.apiclient.v3.jsontransformer.PolymorphicType
78
import com.ecwid.apiclient.v3.jsontransformer.gson.typeadapters.GsonNullableUpdatedValueTypeAdapterFactory
89
import com.ecwid.apiclient.v3.jsontransformer.gson.typeadapters.GsonPolymorphicDeserializer
910
import com.ecwid.apiclient.v3.jsontransformer.gson.typeadapters.GsonProductFiltersDeserializer
11+
import com.ecwid.apiclient.v3.jsontransformer.gson.typeadapters.ParsedResponseWithExtDeserializer
1012
import com.google.gson.*
1113

1214
class GsonTransformer(polymorphicTypes: List<PolymorphicType<*>>) : JsonTransformer {
@@ -19,6 +21,7 @@ class GsonTransformer(polymorphicTypes: List<PolymorphicType<*>>) : JsonTransfor
1921
gsonBuilder.registerTypeAdapter(polymorphType.rootClass, GsonPolymorphicDeserializer(polymorphType))
2022
}
2123
gsonBuilder.registerTypeAdapter(ProductFilters::class.java, GsonProductFiltersDeserializer())
24+
gsonBuilder.registerTypeAdapter(ParsedResponseWithExt::class.java, ParsedResponseWithExtDeserializer())
2225
gsonBuilder.registerTypeAdapterFactory(GsonNullableUpdatedValueTypeAdapterFactory)
2326
}
2427
.create()
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.ecwid.apiclient.v3.jsontransformer.gson.typeadapters
2+
3+
import com.ecwid.apiclient.v3.impl.ParsedResponseWithExt
4+
import com.google.gson.JsonDeserializationContext
5+
import com.google.gson.JsonDeserializer
6+
import com.google.gson.JsonElement
7+
import java.lang.reflect.ParameterizedType
8+
import java.lang.reflect.Type
9+
10+
class ParsedResponseWithExtDeserializer : JsonDeserializer<ParsedResponseWithExt<*, *>> {
11+
12+
override fun deserialize(
13+
json: JsonElement,
14+
typeOfT: Type,
15+
context: JsonDeserializationContext
16+
): ParsedResponseWithExt<*, *> {
17+
val actualTypeArguments = (typeOfT as ParameterizedType).actualTypeArguments
18+
19+
val baseResult: Any? = context.deserialize(json, actualTypeArguments[0])
20+
val extResult: Any? = context.deserialize(json, actualTypeArguments[1])
21+
22+
return ParsedResponseWithExt(
23+
baseResult = baseResult,
24+
extResult = extResult,
25+
)
26+
}
27+
28+
}

src/test/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformerTest.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.ecwid.apiclient.v3.jsontransformer.gson
33
import com.ecwid.apiclient.v3.dto.common.NullableUpdatedValue
44
import com.ecwid.apiclient.v3.dto.order.request.UpdatedOrder
55
import com.ecwid.apiclient.v3.dto.product.request.UpdatedProduct
6+
import com.ecwid.apiclient.v3.impl.ParsedResponseWithExt
67
import com.google.gson.JsonParser
78
import org.junit.jupiter.api.Assertions.assertEquals
89
import org.junit.jupiter.api.Test
@@ -209,6 +210,26 @@ internal class GsonTransformerTest {
209210
transformer.serialize(product, null)
210211
)
211212
}
213+
214+
@Test
215+
fun `test deserialization of ParsedResponseWithExt`() {
216+
val json = "{'testField': {'baseField': 'base', 'extField': 'ext'}}"
217+
val deserializedValue = transformer.deserialize(json, TestParsedResponseWithExt::class.java)
218+
assertEquals(
219+
TestParsedResponseWithExt(
220+
testField = ParsedResponseWithExt(
221+
baseResult = TestParsedResponseWithExt.TestBaseResult(
222+
baseField = "base"
223+
),
224+
extResult = TestParsedResponseWithExt.TestExtResult(
225+
extField = "ext"
226+
),
227+
)
228+
),
229+
deserializedValue
230+
)
231+
}
232+
212233
}
213234

214235
private fun assertJsonEquals(expected: String, actual: String) {
@@ -231,3 +252,17 @@ private data class OrderItemExt(
231252
)
232253

233254
private data class ComplexExtraField(val value: String? = null)
255+
256+
private data class TestParsedResponseWithExt(
257+
val testField: ParsedResponseWithExt<TestBaseResult, TestExtResult>
258+
) {
259+
260+
data class TestBaseResult(
261+
val baseField: String
262+
)
263+
264+
data class TestExtResult(
265+
val extField: String
266+
)
267+
268+
}

0 commit comments

Comments
 (0)