All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.FlowsAggregation.kt Maven / Gradle / Ivy

The newest version!
package com.github.insanusmokrassar.TelegramBotAPI.extensions.utils

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.BroadcastChannel
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.*

/**
 * Analog of [merge] function for [Flow]s. The difference is in the usage of [BroadcastChannel] in this case
 */
fun  aggregateFlows(
    withScope: CoroutineScope,
    vararg flows: Flow,
    internalBufferSize: Int = Channel.BUFFERED
): Flow {
    val bc = BroadcastChannel(internalBufferSize)
    flows.forEach {
        it.onEach {
            safely { bc.send(it) }
        }.launchIn(withScope)
    }
    return bc.asFlow()
}

fun  Flow>.flatMap(): Flow = flow {
    collect {
        it.forEach {
            emit(it)
        }
    }
}

fun  Flow.flatMap(mapper: (T) -> Iterable): Flow = flow {
    collect {
        mapper(it).forEach {
            emit(it)
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy