package com.insanusmokrassar.krontab.utils import com.insanusmokrassar.krontab.KronScheduler import com.soywiz.klock.DateTime import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* @FlowPreview fun KronScheduler.asFlow(): Flow = SchedulerFlow(this) @FlowPreview class SchedulerFlow( private val scheduler: KronScheduler ) : AbstractFlow() { @FlowPreview override suspend fun collectSafely(collector: FlowCollector) { while (true) { val now = DateTime.now() val nextTime = scheduler.next(now) val sleepDelay = (nextTime - now).millisecondsLong delay(sleepDelay) collector.emit(nextTime) } } }