<@U5B2GP4NN> The way that has the least amount of ...
# announcements
e
@vaskir The way that has the least amount of boilerplate seems to be this:
Copy code
sealed class SchedulerMessage<T> {
    open val receiver: (T) -> Unit
    open val msg: T
    open val initialDelay: Duration
    open val replayCh: Channel<Job>
}

class Schedule<T>(
    override val receiver: (T) -> Unit,
    override val msg: T,
    override val initialDelay: Duration,
    override val replayCh: Channel<Job>,
    override val delayBetween: Duration
) : SchedulerMessage<T>()

class ScheduleOnce<T>(
    override val receiver: (T) -> Unit,
    override val msg: T,
    override val initialDelay: Duration,
    override val replayCh: Channel<Job>
) : SchedulerMessage<T>()