Skip to content

Instantly share code, notes, and snippets.

@moskvax
Created November 25, 2021 11:24
Show Gist options
  • Save moskvax/9206a9ed4663af92af721cd0581f7498 to your computer and use it in GitHub Desktop.
Save moskvax/9206a9ed4663af92af721cd0581f7498 to your computer and use it in GitHub Desktop.
import kotlin.experimental.ExperimentalTypeInference
@OptIn(ExperimentalTypeInference::class, ExperimentalCoroutinesApi::class)
inline fun <reified T, R> combineTransformLatest(
vararg flows: Flow<T>,
@BuilderInference noinline transform: suspend FlowCollector<R>.(Array<T>) -> Unit
): Flow<R> {
return combine(*flows) { it }
.transformLatest(transform)
}
@OptIn(ExperimentalTypeInference::class)
fun <T1, T2, R> combineTransformLatest(
flow: Flow<T1>,
flow2: Flow<T2>,
@BuilderInference transform: suspend FlowCollector<R>.(T1, T2) -> Unit
): Flow<R> {
return combineTransformLatest(flow, flow2) { args ->
@Suppress("UNCHECKED_CAST")
transform(
args[0] as T1,
args[1] as T2
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment