All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.extensions.NetworkResponse.kt Maven / Gradle / Ivy

The newest version!
package com.javiersc.resources.networkResponse.extensions

import com.javiersc.resources.networkResponse.NetworkResponse
import com.javiersc.resources.resource.Resource
import io.ktor.http.Headers
import io.ktor.http.HttpStatusCode
import kotlin.jvm.JvmName

/**
 * Map NetworkResponse to Resource where:
 * - NetworkResponse.Success -> Resource.Success
 * - NetworkResponse.Error -> Resource.Error
 * - NetworkResponse.UnknownError -> Resource.Error
 * - NetworkResponse.RemoteNotAvailable -> Resource.Error
 * - NetworkResponse.InternetNotAvailable -> Resource.Error
 */
public fun  NetworkResponse.toResource(
    success: (NR, HttpStatusCode, Headers) -> R,
    error: (NE, HttpStatusCode, Headers) -> E,
    unknownError: (Throwable) -> E,
    remoteNotAvailable: () -> E,
    internetNotAvailable: () -> E,
): Resource = when (this) {
    is NetworkResponse.Success -> Resource.Success(success(data, status, headers))
    is NetworkResponse.Error -> Resource.Error(error(this.error, status, headers))
    is NetworkResponse.UnknownError -> Resource.Error(unknownError(throwable))
    is NetworkResponse.RemoteNotAvailable -> Resource.Error(remoteNotAvailable())
    is NetworkResponse.InternetNotAvailable -> Resource.Error(internetNotAvailable())
}

/**
 * Simpler function for mapping NetworkResponse to Resource where:
 * - NetworkResponse.Success -> Resource.Success
 * - NetworkResponse.Error -> Resource.Error
 * - NetworkResponse.UnknownError -> Resource.Error
 * - NetworkResponse.RemoteNotAvailable -> Resource.Error
 * - NetworkResponse.InternetNotAvailable -> Resource.Error
 */
@JvmName("toResource2")
public fun  NetworkResponse.toResource(
    success: (NR) -> R,
    error: (NE) -> E,
    unknownError: (Throwable) -> E,
    remoteNotAvailable: () -> E,
    internetNotAvailable: () -> E,
): Resource = when (this) {
    is NetworkResponse.Success -> Resource.Success(success(data))
    is NetworkResponse.Error -> Resource.Error(error(this.error))
    is NetworkResponse.UnknownError -> Resource.Error(unknownError(throwable))
    is NetworkResponse.RemoteNotAvailable -> Resource.Error(remoteNotAvailable())
    is NetworkResponse.InternetNotAvailable -> Resource.Error(internetNotAvailable())
}

/**
 * Simpler function for mapping NetworkResponse to Resource where:
 * - NetworkResponse.Success -> Resource.Success
 * - NetworkResponse.Error -> Resource.Error
 * - NetworkResponse.UnknownError -> Resource.Error
 * - NetworkResponse.RemoteNotAvailable> -> Resource.Error
 * - NetworkResponse.InternetNotAvailable -> Resource.Error
 */
@JvmName("toResource3")
public fun  NetworkResponse.toResource(
    success: (NR) -> R,
    error: (HttpStatusCode) -> E,
    unknownError: (Throwable) -> E,
    remoteNotAvailable: () -> E,
    internetNotAvailable: () -> E,
): Resource = when (this) {
    is NetworkResponse.Success -> Resource.Success(success(data))
    is NetworkResponse.Error -> Resource.Error(error(status))
    is NetworkResponse.UnknownError -> Resource.Error(unknownError(throwable))
    is NetworkResponse.RemoteNotAvailable -> Resource.Error(remoteNotAvailable())
    is NetworkResponse.InternetNotAvailable -> Resource.Error(internetNotAvailable())
}

/**
 * Simpler function for mapping NetworkResponse to Resource where:
 * - NetworkResponse.Success -> Resource.Success
 * - NetworkResponse.Error -> Resource.Error
 *
 * Notes:
 * - There is no error data
 * - UnknownError, RemoteNotAvailable and InternetNotAvailable are mapped with error too.
 */
@JvmName("toResource4")
public fun  NetworkResponse.toResource(
    success: (NR) -> R,
    error: () -> E,
): Resource = when (this) {
    is NetworkResponse.Success -> Resource.Success(success(data))
    is NetworkResponse.Error -> Resource.Error(error())
    is NetworkResponse.UnknownError -> Resource.Error(error())
    is NetworkResponse.RemoteNotAvailable -> Resource.Error(error())
    is NetworkResponse.InternetNotAvailable -> Resource.Error(error())
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy