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

eventstore.util.ToCoarsest.scala Maven / Gradle / Ivy

The newest version!
package eventstore.util

import scala.concurrent.duration._

// it is a backport of method introduced in Scala 2.11 - Duration.toCoarsest
object ToCoarsest {
  def apply(x: FiniteDuration): FiniteDuration = {
    def loop(length: Long, unit: TimeUnit): FiniteDuration = {
      def coarserOrThis(coarser: TimeUnit, divider: Int) =
        if (length % divider == 0) loop(length / divider, coarser)
        else if (unit == x.unit) x
        else FiniteDuration(length, unit)

      unit match {
        case DAYS         => FiniteDuration(length, unit)
        case HOURS        => coarserOrThis(DAYS, 24)
        case MINUTES      => coarserOrThis(HOURS, 60)
        case SECONDS      => coarserOrThis(MINUTES, 60)
        case MILLISECONDS => coarserOrThis(SECONDS, 1000)
        case MICROSECONDS => coarserOrThis(MILLISECONDS, 1000)
        case NANOSECONDS  => coarserOrThis(MICROSECONDS, 1000)
      }
    }

    if (x.unit == DAYS || x.length == 0) x
    else loop(x.length, x.unit)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy