code: package io.paradoxical.cassieq.model.time;
  
  import java.util.concurrent.ScheduledFuture;
  import java.util.concurrent.TimeUnit;
  
  public interface Scheduler {
      /**
       * Schedule with a delay. Wait for the runnable to complete, then wait the duration and schedule again
       *
       * @param runnable
       * @param delay
       * @param duration
       * @param unit
       * @return
       */
      ScheduledFuture<?> periodicWithDelay(Runnable runnable, long delay, long duration, TimeUnit unit);
  
      ScheduledFuture<?> scheduleOnce(Runnable runnableFuture, long duration, TimeUnit unit);
  }
  