@@ -37,6 +37,7 @@ import javax.net.ssl.TrustManager
37
37
import javax.net.ssl.X509TrustManager
38
38
import kotlin.coroutines.CoroutineContext
39
39
import kotlin.coroutines.resume
40
+ import okhttp3.Response as Okhttp3Response
40
41
41
42
class Client @JvmOverloads constructor(
42
43
context: Context,
@@ -266,7 +267,10 @@ class Client @JvmOverloads constructor(
266
267
.get()
267
268
.build()
268
269
269
- return awaitResponse(request, responseType, converter)
270
+ val response = awaitResponse(request, responseType)
271
+
272
+ @Suppress("UNCHECKED_CAST")
273
+ return converter?.invoke(response.data) ?: response.data as T
270
274
}
271
275
272
276
val body = if (MultipartBody.FORM.toString() == headers["content-type"]) {
@@ -303,7 +307,10 @@ class Client @JvmOverloads constructor(
303
307
.method(method, body)
304
308
.build()
305
309
306
- return awaitResponse(request, responseType, converter)
310
+ val response = awaitResponse(request, responseType)
311
+
312
+ @Suppress("UNCHECKED_CAST")
313
+ return converter?.invoke(response.data) ?: response.data as T
307
314
}
308
315
309
316
/**
@@ -441,11 +448,10 @@ class Client @JvmOverloads constructor(
441
448
* @return [T]
442
449
*/
443
450
@Throws({{ spec .title | caseUcfirst }}Exception::class)
444
- private suspend fun <T > awaitResponse(
451
+ internal suspend fun <T > awaitResponse(
445
452
request: Request,
446
453
responseType: Class<T >,
447
- converter: ((Any) -> T)? = null
448
- ) = suspendCancellableCoroutine<T > {
454
+ ) = suspendCancellableCoroutine<Response <Any >> {
449
455
http.newCall(request).enqueue(object : Callback {
450
456
override fun onFailure(call: Call, e: IOException) {
451
457
if (it.isCancelled) {
@@ -454,8 +460,7 @@ class Client @JvmOverloads constructor(
454
460
it.cancel(e)
455
461
}
456
462
457
- @Suppress("UNCHECKED_CAST")
458
- override fun onResponse(call: Call, response: Response) {
463
+ override fun onResponse(call: Call, response: Okhttp3Response) {
459
464
if (!response.isSuccessful) {
460
465
val body = response.body!!
461
466
.charStream()
@@ -481,19 +486,19 @@ class Client @JvmOverloads constructor(
481
486
}
482
487
when {
483
488
responseType == Boolean::class.java -> {
484
- it.resume(true as T )
489
+ it.resume(Response( true) )
485
490
return
486
491
}
487
492
responseType == ByteArray::class.java -> {
488
- it.resume( response.body!!
493
+ val data = response.body!!
489
494
.byteStream()
490
495
.buffered()
491
- .use(BufferedInputStream::readBytes) as T
492
- )
496
+ .use(BufferedInputStream::readBytes)
497
+ it.resume(Response(data) )
493
498
return
494
499
}
495
500
response.body == null -> {
496
- it.resume(true as T )
501
+ it.resume(Response( true) )
497
502
return
498
503
}
499
504
}
@@ -502,15 +507,15 @@ class Client @JvmOverloads constructor(
502
507
.buffered()
503
508
.use(BufferedReader::readText)
504
509
if (body.isEmpty()) {
505
- it.resume(true as T )
510
+ it.resume(Response( true) )
506
511
return
507
512
}
508
513
val map = gson.fromJson<Any >(
509
514
body,
510
515
object : TypeToken<Any >(){}.type
511
516
)
512
517
it.resume(
513
- converter?.invoke (map) ?: map as T
518
+ Response (map)
514
519
)
515
520
}
516
521
})
0 commit comments