Пример
fun <T, A> resultLiveData(
databaseQuery: () -> LiveData<T>,
networkCall: suspend () -> Result<A>,
saveCallResult: suspend (A) -> Unit): LiveData<Result<T>> =
liveData(
Dispatchers.IO){
emit(Result.loading())
val responseSource = networkCall.invoke()
Log.d("ResultLiveData Network", responseSource.toString())
if(responseSource.status == Result.Status.SUCCESS) {
saveCallResult(
responseSource.data!!)
Log.d("resultLiveData", "save database")
}
else if(responseSource.status == Result.Status.ERROR){
emit(Result.error(responseSource.error))
Log.d("resultLiveData", "error ${responseSource.error}")
}
val databaseSource = databaseQuery.invoke()
emitSource(
databaseSource.map { Result.success(it) })
}