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

commonMain.kase.StateMapUtils.kt Maven / Gradle / Ivy

There is a newer version: 3.0.13
Show newest version
package kase

private fun  Loading.mapToState(transform: (D) -> R): Loading {
    val d = data ?: return Loading(message, null)
    return try {
        Loading(message, transform(d))
    } catch (err: Throwable) {
        Loading(message, null)
    }
}

internal fun  Success.mapToState(transform: (D) -> R): Result {
    val d = data ?: return Success(null) as Success
    return try {
        Success(transform(d))
    } catch (err: Throwable) {
        Failure(err, err.message ?: Failure.DEFAULT_MESSAGE, null)
    }
}

internal fun  Failure.mapToState(transform: (D) -> R): Failure {
    val d = data ?: return Failure(cause, message, null)
    return try {
        Failure(cause, message, transform(d))
    } catch (err: Throwable) {
        err.addSuppressed(cause)
        Failure(err, err.message ?: message, null)
    }
}

private fun  State.mapToState(transform: (D) -> R): State = when (this) {
    is Failure -> mapToState(transform)
    is Loading -> mapToState(transform)
    is Success -> mapToState(transform)
    else -> this as State
}

fun  LazyState.map(transform: (D) -> R): LazyState = mapToState(transform) as LazyState

fun  ExecutorState.map(transform: (D) -> R): ExecutorState = mapToState(transform) as ExecutorState




© 2015 - 2024 Weber Informatics LLC | Privacy Policy