
jvmMain.retrofit.NetworkResponseCallAdapterFactory.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of network-response-jvm Show documentation
Show all versions of network-response-jvm Show documentation
NetworkResponse multiplatform
The newest version!
package com.javiersc.resources.networkResponse.retrofit
import com.javiersc.resources.networkResponse.NetworkResponse
import com.javiersc.resources.networkResponse.retrofit.deferred.NetworkResponseDeferredCallAdapter
import com.javiersc.resources.networkResponse.retrofit.suspend.NetworkResponseSuspendCallAdapter
import kotlinx.coroutines.Deferred
import retrofit2.Call
import retrofit2.CallAdapter
import retrofit2.Retrofit
import java.lang.reflect.ParameterizedType
import java.lang.reflect.Type
public class NetworkResponseCallAdapterFactory : CallAdapter.Factory() {
override fun get(
returnType: Type,
annotations: Array,
retrofit: Retrofit
): CallAdapter<*, *>? {
check(returnType is ParameterizedType) { "$returnType must be parameterized. Raw types are not supported" }
val containerType = getParameterUpperBound(0, returnType)
if (getRawType(containerType) != NetworkResponse::class.java) return null
check(containerType is ParameterizedType) {
"$containerType must be parameterized. Raw types are not supported"
}
val (successBodyType, errorBodyType) = containerType.getBodyTypes()
val errorBodyConverter = retrofit.nextResponseBodyConverter(null, errorBodyType, annotations)
return when (getRawType(returnType)) {
Deferred::class.java -> NetworkResponseDeferredCallAdapter(successBodyType, errorBodyConverter)
Call::class.java -> NetworkResponseSuspendCallAdapter(successBodyType, errorBodyConverter)
else -> null
}
}
private fun ParameterizedType.getBodyTypes(): Pair {
val successType = getParameterUpperBound(0, this)
val errorType = getParameterUpperBound(1, this)
return successType to errorType
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy