krontab/src/commonMain/kotlin/dev/inmo/krontab/internal/CronDateTimeScheduler.kt

39 lines
1.2 KiB
Kotlin
Raw Normal View History

2020-11-21 08:58:19 +00:00
package dev.inmo.krontab.internal
import korlibs.time.DateTime
2021-04-22 05:58:19 +00:00
import dev.inmo.krontab.KronScheduler
2020-11-21 08:58:19 +00:00
/**
* Cron-oriented realisation of [KronScheduler]
*
* @see dev.inmo.krontab.AnyTimeScheduler
2022-04-29 15:57:10 +00:00
* @see dev.inmo.krontab.EveryMillisecondScheduler
2020-11-21 08:58:19 +00:00
* @see dev.inmo.krontab.EverySecondScheduler
* @see dev.inmo.krontab.EveryMinuteScheduler
* @see dev.inmo.krontab.EveryHourScheduler
* @see dev.inmo.krontab.EveryDayOfMonthScheduler
* @see dev.inmo.krontab.EveryMonthScheduler
* @see dev.inmo.krontab.EveryYearScheduler
2020-11-21 08:58:19 +00:00
*
* @see dev.inmo.krontab.builder.buildSchedule
* @see dev.inmo.krontab.builder.SchedulerBuilder
*/
internal data class CronDateTimeScheduler internal constructor(
internal val cronDateTime: CronDateTime
2020-11-21 08:58:19 +00:00
) : KronScheduler {
/**
* @return Near date using [cronDateTimes] list and getting the [Iterable.minByOrNull] one
2020-11-21 08:58:19 +00:00
*
* @see toNearDateTime
*/
2021-04-22 06:24:26 +00:00
override suspend fun next(relatively: DateTime): DateTime? {
return cronDateTime.toNearDateTime(relatively)
2020-11-21 08:58:19 +00:00
}
}
internal fun mergeCronDateTimeSchedulers(
schedulers: List<CronDateTimeScheduler>
): CronDateTimeScheduler = CronDateTimeScheduler(
schedulers.map { it.cronDateTime }.merge()
)