Skip to content

Commit 3ae3a37

Browse files
authored
[Kotlin 1.4] Update to Kotlin 1.4 (#766)
* Update to kotlin 1.4 * Update version for dependencies * Update compile error * Update for moshi * Update to version 1.4.10
1 parent c8593bc commit 3ae3a37

File tree

14 files changed

+103
-61
lines changed

14 files changed

+103
-61
lines changed

buildSrc/src/main/kotlin/Constants.kt

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,20 @@ object Fuel {
7575

7676
// Core dependencies
7777
object Kotlin {
78-
const val version = "1.3.70"
78+
const val version = "1.4.10"
7979
const val stdlib = "org.jetbrains.kotlin:kotlin-stdlib:$version"
8080
const val plugin = "kotlin"
8181
const val androidPlugin = "kotlin-android"
8282
const val androidExtensionsPlugin = "kotlin-android-extensions"
8383
}
8484

8585
object Result {
86-
const val version = "2.2.0"
86+
const val version = "3.1.0"
8787
const val dependency = "com.github.kittinunf.result:result:$version"
8888
}
8989

9090
object Json {
91-
const val version = "20180813"
91+
const val version = "20200518"
9292
const val dependency = "org.json:json:$version"
9393
}
9494

@@ -129,37 +129,39 @@ object AndroidX {
129129

130130
// Modules dependencies
131131
object Forge {
132-
const val version = "1.0.0-alpha2"
132+
const val version = "1.0.0-alpha3"
133133
const val dependency = "com.github.kittinunf.forge:forge:$version"
134134
}
135135

136136
object Gson {
137-
const val version = "2.8.5"
137+
const val version = "2.8.6"
138138
const val dependency = "com.google.code.gson:gson:$version"
139139
}
140140

141141
object Jackson {
142-
const val version = "2.9.9"
142+
const val version = "2.11.2"
143143
const val dependency = "com.fasterxml.jackson.module:jackson-module-kotlin:$version"
144144
}
145145

146146
object KotlinX {
147147
object Coroutines {
148-
const val version = "1.3.3"
148+
const val version = "1.3.9"
149149
val android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$version"
150150
val jvm = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version"
151151
}
152152

153153
object Serialization {
154-
const val version = "0.20.0"
155-
const val dependency = "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$version"
154+
const val version = "1.0.0-RC"
155+
const val dependency = "org.jetbrains.kotlinx:kotlinx-serialization-core:$version"
156156
const val plugin = "kotlinx-serialization"
157157
}
158158
}
159159

160160
object Moshi {
161-
const val version = "1.8.0"
161+
const val version = "1.10.0"
162162
const val dependency = "com.squareup.moshi:moshi:$version"
163+
164+
const val codegen = "com.squareup.moshi:moshi-kotlin-codegen:$version"
163165
}
164166

165167
object Reactor {

fuel-forge/src/main/java/com/github/kittinunf/fuel/forge/FuelForge.kt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import com.github.kittinunf.forge.Forge
44
import com.github.kittinunf.forge.core.DeserializedResult
55
import com.github.kittinunf.forge.core.JSON
66
import com.github.kittinunf.fuel.core.FuelError
7-
import com.github.kittinunf.fuel.core.ResponseHandler
87
import com.github.kittinunf.fuel.core.Request
98
import com.github.kittinunf.fuel.core.Response
109
import com.github.kittinunf.fuel.core.ResponseDeserializable
10+
import com.github.kittinunf.fuel.core.ResponseHandler
1111
import com.github.kittinunf.fuel.core.response
1212
import com.github.kittinunf.result.Result
1313

@@ -28,13 +28,9 @@ inline fun <reified T : Any> Request.responseObject(noinline deserializer: JSON.
2828
inline fun <reified T : Any> Request.responseObjects(noinline deserializer: JSON.() -> DeserializedResult<T>) = response(forgesDeserializerOf(deserializer))
2929

3030
fun <T : Any> forgeDeserializerOf(deserializer: JSON.() -> DeserializedResult<T>) = object : ResponseDeserializable<T> {
31-
override fun deserialize(content: String): T? {
32-
when (val result = Forge.modelFromJson(content, deserializer)) {
33-
is DeserializedResult.Success -> return result.value
34-
is DeserializedResult.Failure -> throw result.error
35-
}
36-
}
31+
override fun deserialize(content: String): T? = Forge.modelFromJson(content, deserializer).get()
3732
}
33+
3834
fun <T : Any> forgesDeserializerOf(deserializer: JSON.() -> DeserializedResult<T>) = object : ResponseDeserializable<List<T>> {
39-
override fun deserialize(content: String): List<T>? = Forge.modelsFromJson(content, deserializer).map { it.get<T>() }
35+
override fun deserialize(content: String): List<T>? = Forge.modelsFromJson(content, deserializer).get()
4036
}
Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,58 @@
11
package com.github.kittinunf.fuel.serialization
22

33
import com.github.kittinunf.fuel.core.FuelError
4-
import com.github.kittinunf.fuel.core.ResponseHandler
54
import com.github.kittinunf.fuel.core.Request
65
import com.github.kittinunf.fuel.core.Response
76
import com.github.kittinunf.fuel.core.ResponseDeserializable
7+
import com.github.kittinunf.fuel.core.ResponseHandler
88
import com.github.kittinunf.fuel.core.response
99
import com.github.kittinunf.result.Result
1010
import kotlinx.serialization.DeserializationStrategy
11-
import kotlinx.serialization.ImplicitReflectionSerializer
11+
import kotlinx.serialization.InternalSerializationApi
1212
import kotlinx.serialization.json.Json
13-
import kotlinx.serialization.json.JsonConfiguration
1413
import kotlinx.serialization.serializer
1514
import java.io.InputStream
1615
import java.io.Reader
1716

1817
inline fun <reified T : Any> Request.responseObject(
1918
loader: DeserializationStrategy<T>,
20-
json: Json = Json(JsonConfiguration.Stable),
19+
json: Json = Json { allowStructuredMapKeys = true },
2120
noinline deserializer: (Request, Response, Result<T, FuelError>) -> Unit
2221
) = response(kotlinxDeserializerOf(loader, json), deserializer)
2322

24-
@ImplicitReflectionSerializer
23+
@OptIn(InternalSerializationApi::class)
2524
inline fun <reified T : Any> Request.responseObject(
26-
json: Json = Json(JsonConfiguration.Stable),
25+
json: Json = Json { allowStructuredMapKeys = true },
2726
noinline deserializer: (Request, Response, Result<T, FuelError>) -> Unit
2827
) = responseObject(T::class.serializer(), json, deserializer)
2928

3029
inline fun <reified T : Any> Request.responseObject(
3130
deserializer: ResponseHandler<T>,
3231
loader: DeserializationStrategy<T>,
33-
json: Json = Json(JsonConfiguration.Stable)
32+
json: Json = Json { allowStructuredMapKeys = true }
3433
) = response(kotlinxDeserializerOf(loader, json), deserializer)
3534

36-
@ImplicitReflectionSerializer
35+
@OptIn(InternalSerializationApi::class)
3736
inline fun <reified T : Any> Request.responseObject(
3837
deserializer: ResponseHandler<T>,
39-
json: Json = Json(JsonConfiguration.Stable)
38+
json: Json = Json { allowStructuredMapKeys = true }
4039
) = responseObject(deserializer, T::class.serializer(), json)
4140

4241
inline fun <reified T : Any> Request.responseObject(
4342
loader: DeserializationStrategy<T>,
44-
json: Json = Json(JsonConfiguration.Stable)
43+
json: Json = Json { allowStructuredMapKeys = true }
4544
) = response(kotlinxDeserializerOf(loader, json))
4645

47-
@ImplicitReflectionSerializer
46+
@OptIn(InternalSerializationApi::class)
4847
inline fun <reified T : Any> Request.responseObject(
49-
json: Json = Json(JsonConfiguration.Stable)
48+
json: Json = Json { allowStructuredMapKeys = true }
5049
) = responseObject(T::class.serializer(), json)
5150

5251
inline fun <reified T : Any> kotlinxDeserializerOf(
5352
loader: DeserializationStrategy<T>,
54-
json: Json = Json(JsonConfiguration.Stable)
53+
json: Json = Json { allowStructuredMapKeys = true }
5554
) = object : ResponseDeserializable<T> {
56-
override fun deserialize(content: String): T? = json.parse(loader, content)
55+
override fun deserialize(content: String): T? = json.decodeFromString(loader, content)
5756
override fun deserialize(reader: Reader): T? = deserialize(reader.readText())
5857
override fun deserialize(bytes: ByteArray): T? = deserialize(String(bytes))
5958

@@ -64,7 +63,7 @@ inline fun <reified T : Any> kotlinxDeserializerOf(
6463
}
6564
}
6665

67-
@ImplicitReflectionSerializer
66+
@OptIn(InternalSerializationApi::class)
6867
inline fun <reified T : Any> kotlinxDeserializerOf(
69-
json: Json = Json(JsonConfiguration.Stable)
68+
json: Json = Json { allowStructuredMapKeys = true }
7069
) = kotlinxDeserializerOf(T::class.serializer(), json)

fuel-kotlinx-serialization/src/test/kotlin/com/github/kittinunf/fuel/FuelKotlinxSerializationTest.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import com.github.kittinunf.fuel.serialization.kotlinxDeserializerOf
88
import com.github.kittinunf.fuel.serialization.responseObject
99
import com.github.kittinunf.fuel.test.MockHttpTestCase
1010
import com.github.kittinunf.result.Result
11-
import kotlinx.serialization.ImplicitReflectionSerializer
1211
import kotlinx.serialization.Serializable
13-
import kotlinx.serialization.builtins.list
12+
import kotlinx.serialization.builtins.ListSerializer
1413
import org.hamcrest.CoreMatchers.equalTo
1514
import org.hamcrest.CoreMatchers.instanceOf
1615
import org.hamcrest.CoreMatchers.isA
@@ -24,7 +23,6 @@ import org.junit.Test
2423
import org.mockserver.matchers.Times
2524
import java.net.HttpURLConnection
2625

27-
@ImplicitReflectionSerializer
2826
class FuelKotlinxSerializationTest : MockHttpTestCase() {
2927

3028
// Model
@@ -175,7 +173,7 @@ class FuelKotlinxSerializationTest : MockHttpTestCase() {
175173
" ]").withStatusCode(HttpURLConnection.HTTP_OK)
176174
)
177175

178-
Fuel.get(mock.path("issues")).responseObject(loader = IssueInfo.serializer().list) { _, _, result ->
176+
Fuel.get(mock.path("issues")).responseObject(loader = ListSerializer(IssueInfo.serializer())) { _, _, result ->
179177
val issues = result.get()
180178
assertNotEquals(issues.size, 0)
181179
assertThat(issues[0], isA(IssueInfo::class.java))

fuel-moshi/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
plugins {
2+
kotlin("kapt")
3+
}
4+
15
dependencies {
26
api(project(Fuel.name))
37

48
implementation(Moshi.dependency)
59

610
testImplementation(project(Fuel.Test.name))
11+
kaptTest(Moshi.codegen)
712
}

fuel-moshi/src/main/kotlin/com/github/kittinunf/fuel/moshi/FuelMoshi.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,9 @@ inline fun <reified T : Any> Request.responseObject(handler: ResponseHandler<T>)
2222
inline fun <reified T : Any> Request.responseObject() = response(moshiDeserializerOf(T::class.java))
2323

2424
fun <T : Any> moshiDeserializerOf(clazz: Class<T>) = object : ResponseDeserializable<T> {
25-
override fun deserialize(content: String): T? = defaultMoshi
26-
.build()
27-
.adapter(clazz)
28-
.fromJson(content)
25+
override fun deserialize(inputStream: InputStream): T? = defaultMoshi.build().adapter(clazz).fromJson(Okio.buffer(Okio.source(inputStream)))
26+
27+
override fun deserialize(content: String): T? = defaultMoshi.build().adapter(clazz).fromJson(content)
2928
}
3029

3130
inline fun <reified T : Any> moshiDeserializerOf(adapter: JsonAdapter<T>) = object : ResponseDeserializable<T> {

fuel-moshi/src/test/kotlin/com/github/kittinunf/fuel/FuelMoshiTest.kt

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ import com.github.kittinunf.fuel.moshi.moshiDeserializerOf
99
import com.github.kittinunf.fuel.moshi.responseObject
1010
import com.github.kittinunf.fuel.test.MockHttpTestCase
1111
import com.github.kittinunf.result.Result
12-
import com.github.kittinunf.result.Result.Failure
13-
import com.github.kittinunf.result.Result.Success
14-
import com.google.common.reflect.TypeToken
12+
import com.squareup.moshi.FromJson
1513
import com.squareup.moshi.Json
1614
import com.squareup.moshi.JsonAdapter
15+
import com.squareup.moshi.JsonClass
1716
import com.squareup.moshi.JsonReader
1817
import com.squareup.moshi.JsonWriter
1918
import com.squareup.moshi.Moshi
19+
import com.squareup.moshi.ToJson
2020
import org.hamcrest.CoreMatchers.equalTo
2121
import org.hamcrest.CoreMatchers.instanceOf
2222
import org.hamcrest.CoreMatchers.isA
@@ -28,6 +28,7 @@ import java.net.HttpURLConnection
2828

2929
class FuelMoshiTest : MockHttpTestCase() {
3030

31+
@JsonClass(generateAdapter = true)
3132
data class HttpBinUserAgentModel(var userAgent: String = "")
3233

3334
@Test
@@ -158,6 +159,7 @@ class FuelMoshiTest : MockHttpTestCase() {
158159
}
159160
}
160161

162+
@JsonClass(generateAdapter = true)
161163
data class IssueInfo(val id: Int, val title: String, val number: Int)
162164

163165
/**
@@ -187,12 +189,14 @@ class FuelMoshiTest : MockHttpTestCase() {
187189
FINISHED
188190
}
189191

192+
@JsonClass(generateAdapter = true)
190193
data class StageDTO(val stage: Stage)
191194

192-
class StageMoshiAdapter : JsonAdapter<Stage>() {
195+
private class StageAdapter : JsonAdapter<Stage>() {
196+
197+
@FromJson
193198
override fun fromJson(reader: JsonReader): Stage? {
194199
val value = reader.nextString()
195-
196200
return when (value) {
197201
"na" -> Stage.UNKNOWN
198202
"in_progress" -> Stage.IN_PROGRESS
@@ -201,13 +205,15 @@ class FuelMoshiTest : MockHttpTestCase() {
201205
}
202206
}
203207

208+
@ToJson
204209
override fun toJson(writer: JsonWriter, value: Stage?) {
210+
TODO("not implemented")
205211
}
206212
}
207213

208214
@Test
209215
fun moshiTestCustomAdapterSuccess() {
210-
defaultMoshi.add(TypeToken.of(Stage::class.java).type, StageMoshiAdapter())
216+
defaultMoshi.add(StageAdapter())
211217

212218
mock.apply {
213219
chain(
@@ -228,23 +234,23 @@ class FuelMoshiTest : MockHttpTestCase() {
228234

229235
assertThat(req, notNullValue())
230236
assertThat(res, notNullValue())
231-
assertThat(res1 as Success, isA(Result.Success::class.java))
237+
assertThat(res1 as Result.Success, isA(Result.Success::class.java))
232238
assertThat(res1.value.stage, equalTo(Stage.UNKNOWN))
233239

234240
val (_, _, res2) = Fuel.get(mock.path("stage2")).responseObject<StageDTO>()
235241

236-
assertThat(res2 as Success, isA(Result.Success::class.java))
242+
assertThat(res2 as Result.Success, isA(Result.Success::class.java))
237243
assertThat(res2.value.stage, equalTo(Stage.IN_PROGRESS))
238244

239245
val (_, _, res3) = Fuel.get(mock.path("stage3")).responseObject<StageDTO>()
240246

241-
assertThat(res3 as Success, isA(Result.Success::class.java))
247+
assertThat(res3 as Result.Success, isA(Result.Success::class.java))
242248
assertThat(res3.value.stage, equalTo(Stage.FINISHED))
243249
}
244250

245251
@Test
246252
fun moshiTestCustomAdapterFailure() {
247-
defaultMoshi.add(TypeToken.of(Stage::class.java).type, StageMoshiAdapter())
253+
defaultMoshi.add(StageAdapter())
248254

249255
mock.apply {
250256
chain(
@@ -257,7 +263,6 @@ class FuelMoshiTest : MockHttpTestCase() {
257263

258264
assertThat(req, notNullValue())
259265
assertThat(res, notNullValue())
260-
assertThat(res1 as Failure, isA(Result.Failure::class.java))
261-
assertThat(res1.error.exception as IllegalStateException, isA(IllegalStateException::class.java))
266+
assertThat(res1 as Result.Failure, isA(Result.Failure::class.java))
262267
}
263268
}

fuel/src/main/kotlin/com/github/kittinunf/fuel/core/Deserializable.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.github.kittinunf.result.map
1313
import com.github.kittinunf.result.mapError
1414
import java.io.InputStream
1515
import java.io.Reader
16+
import kotlin.jvm.Throws
1617

1718
/**
1819
* Generic interface for [Response] deserialization.
@@ -283,4 +284,6 @@ suspend fun <T : Any, U : Deserializable<T>> Request.awaitResponseResult(deseria
283284

284285
private fun <T : Any, U : Deserializable<T>> serializeFor(result: Result<Response, FuelError>, deserializable: U) =
285286
result.map { (it to deserializable.deserialize(it)) }
286-
.mapError <Pair<Response, T>, Exception, FuelError> { FuelError.wrap(it, result.getOrElse(Response.error())) }
287+
.mapError <Pair<Response, T>, Exception, FuelError> {
288+
FuelError.wrap(it, result.getOrElse { Response.error() })
289+
}

fuel/src/main/kotlin/com/github/kittinunf/fuel/core/requests/UploadRequest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ class UploadRequest private constructor(private val wrapped: Request) : Request
6666
* Add all [dataParts] to be written to the [UploadBody]
6767
* @param dataParts [Iterable<DataPart>] the iterable that yields [DataPart]s
6868
*/
69-
operator fun plus(dataParts: Iterable<DataPart>) = dataParts.fold(this, UploadRequest::plus)
69+
operator fun plus(dataParts: Iterable<DataPart>) = dataParts.fold(this) { acc, dataPart ->
70+
acc.plus(dataPart)
71+
}
7072

7173
/**
7274
* Add a [ProgressCallback] to the [requestProgress]

gradle/wrapper/gradle-wrapper.jar

-561 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)