package it.vfsfitvnm.vimusic.savers import androidx.compose.runtime.saveable.Saver import androidx.compose.runtime.saveable.SaverScope interface ListSaver : Saver, List> { override fun SaverScope.save(value: List): List override fun restore(value: List): List } fun resultSaver(saver: Saver) = object : Saver?, Pair> { override fun restore(value: Pair) = value.first?.let(saver::restore)?.let(Result.Companion::success) ?: value.second?.let(Result.Companion::failure) override fun SaverScope.save(value: Result?) = with(saver) { value?.getOrNull()?.let { save(it) } } to value?.exceptionOrNull() } fun listSaver(saver: Saver) = object : ListSaver { override fun restore(value: List) = value.mapNotNull(saver::restore) override fun SaverScope.save(value: List) = with(saver) { value.mapNotNull { save(it) } } } fun nullableSaver(saver: Saver) = object : Saver { override fun SaverScope.save(value: Original?): Saveable? = value?.let { with(saver) { save(it) } } override fun restore(value: Saveable): Original? = saver.restore(value) }