Coverage Summary for Class: NetworkEitherCallAdapterFactory (com.javiersc.network.either)

Class Method, % Branch, % Line, % Instruction, %
NetworkEitherCallAdapterFactory 100% (4/4) 31.8% (7/22) 75% (24/32) 69.9% (116/166)
NetworkEitherCallAdapterFactory$1 0% (0/1) 0% (0/1) 0% (0/2)
Total 80% (4/5) 31.8% (7/22) 72.7% (24/33) 69% (116/168)


 package com.javiersc.network.either
 
 import com.javiersc.network.either.internal.deferred.NetworkEitherDeferredCallAdapter
 import com.javiersc.network.either.internal.suspend.NetworkEitherSuspendCallAdapter
 import com.javiersc.network.either.utils.isNetworkAvailable as internalIsNetworkAvailable
 import java.lang.reflect.ParameterizedType
 import java.lang.reflect.Type
 import kotlinx.coroutines.Deferred
 import retrofit2.Call
 import retrofit2.CallAdapter
 import retrofit2.Retrofit
 
 public class NetworkEitherCallAdapterFactory(
     private val isNetworkAvailable: () -> Boolean = { internalIsNetworkAvailable }
 ) : CallAdapter.Factory() {
 
     override fun get(
         returnType: Type,
         annotations: Array<Annotation>,
         retrofit: Retrofit
     ): CallAdapter<*, *>? {
         check(returnType is ParameterizedType) {
             "$returnType must be parameterized. Raw types are not supported"
         }
 
         val containerType = getParameterUpperBound(0, returnType)
         if (!containerType.isNetworkEitherType) return null
 
         check(containerType is ParameterizedType) {
             "$containerType must be parameterized. Raw types are not supported"
         }
 
         val (errorBodyType, successBodyType) = containerType.getBodyTypes()
         val errorBodyConverter =
             retrofit.nextResponseBodyConverter<Any>(null, errorBodyType, annotations)
 
         return when (getRawType(returnType)) {
             Deferred::class.java ->
                 NetworkEitherDeferredCallAdapter<Any, Any>(
                     successBodyType,
                     errorBodyConverter,
                     isNetworkAvailable
                 )
             Call::class.java ->
                 NetworkEitherSuspendCallAdapter<Any, Any>(
                     successBodyType,
                     errorBodyConverter,
                     isNetworkAvailable
                 )
             else -> null
         }
     }
 
     private val Type.isNetworkEitherType: Boolean
         get() =
             getRawType(this) != NetworkEither.Failure::class.java ||
                 getRawType(this) != NetworkEither.Failure.Http::class.java ||
                 getRawType(this) != NetworkEither.Failure.Local::class.java ||
                 getRawType(this) != NetworkEither.Failure.Remote::class.java ||
                 getRawType(this) != NetworkEither.Failure.Unknown::class.java ||
                 getRawType(this) != NetworkEither.Success::class.java
 
     private fun ParameterizedType.getBodyTypes(): Pair<Type, Type> {
         val errorType: Type = getParameterUpperBound(0, this)
         val successType: Type = getParameterUpperBound(1, this)
         return errorType to successType
     }
 }