commonMain.kase.StateMapUtils.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kase-core Show documentation
Show all versions of kase-core Show documentation
A kotlin multiplatform library to present common UI states
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