networkBoundResource仅取决于Room



我正在开发一个基于Google文档的netboundBoundResource库:https://developer.android.com/jetpack/guide.

我的代码看起来像这样(它工作):


inline fun <ResultType, RequestType> networkBoundResource(
crossinline loadFromDb: () -> Flow<ResultType>,
crossinline netWorkRequest: suspend () -> Response<RequestType>,
crossinline saveCall: suspend (Response<RequestType>) -> Unit
): Flow<Resource<ResultType>> = flow {
emit(Resource.Loading(loadFromDb().firstOrNull()))
val netWorkResponse = netWorkRequest()
emitAll(
if (netWorkResponse.isSuccessful) {
saveCall(netWorkResponse)
loadFromDb().map { Resource.Success(it) }
} else {
loadFromDb().map { Resource.Error("Error", it) }
}
)
}.flowOn(Dispatchers.IO)

sealed class Resource<T>(
val data: T? = null,
val message: String? = null
) {
class Success<T>(data: T) : Resource<T>(data)
class Loading<T>(data: T? = null) : Resource<T>(data)
class Error<T>(message: String, data: T? = null) : Resource<T>(data, message)
}

我想确保这个库只与ROOM一起工作,我不确定如何管理(它现在与ROOM一起工作)。因此,如果用户中的一个用户想要使用这个库,比如使用REALM,他将无法使用。

最后,这是一个棘手的问题。我发现flowOn正在做我需要的事情。