scala.concurrent.duration.DurationConversions.scala Maven / Gradle / Ivy
/*
* Scala (https://www.scala-lang.org)
*
* Copyright EPFL and Lightbend, Inc.
*
* Licensed under Apache License 2.0
* (http://www.apache.org/licenses/LICENSE-2.0).
*
* See the NOTICE file distributed with this work for
* additional information regarding copyright ownership.
*/
package scala.concurrent.duration
import DurationConversions._
// Would be nice to limit the visibility of this trait a little bit,
// but it crashes scalac to do so.
trait DurationConversions extends Any {
protected def durationIn(unit: TimeUnit): FiniteDuration
def nanoseconds = durationIn(NANOSECONDS)
def nanos = nanoseconds
def nanosecond = nanoseconds
def nano = nanoseconds
def microseconds = durationIn(MICROSECONDS)
def micros = microseconds
def microsecond = microseconds
def micro = microseconds
def milliseconds = durationIn(MILLISECONDS)
def millis = milliseconds
def millisecond = milliseconds
def milli = milliseconds
def seconds = durationIn(SECONDS)
def second = seconds
def minutes = durationIn(MINUTES)
def minute = minutes
def hours = durationIn(HOURS)
def hour = hours
def days = durationIn(DAYS)
def day = days
def nanoseconds[C](c: C)(implicit ev: Classifier[C]): ev.R = ev.convert(nanoseconds)
def nanos[C](c: C)(implicit ev: Classifier[C]): ev.R = nanoseconds(c)
def nanosecond[C](c: C)(implicit ev: Classifier[C]): ev.R = nanoseconds(c)
def nano[C](c: C)(implicit ev: Classifier[C]): ev.R = nanoseconds(c)
def microseconds[C](c: C)(implicit ev: Classifier[C]): ev.R = ev.convert(microseconds)
def micros[C](c: C)(implicit ev: Classifier[C]): ev.R = microseconds(c)
def microsecond[C](c: C)(implicit ev: Classifier[C]): ev.R = microseconds(c)
def micro[C](c: C)(implicit ev: Classifier[C]): ev.R = microseconds(c)
def milliseconds[C](c: C)(implicit ev: Classifier[C]): ev.R = ev.convert(milliseconds)
def millis[C](c: C)(implicit ev: Classifier[C]): ev.R = milliseconds(c)
def millisecond[C](c: C)(implicit ev: Classifier[C]): ev.R = milliseconds(c)
def milli[C](c: C)(implicit ev: Classifier[C]): ev.R = milliseconds(c)
def seconds[C](c: C)(implicit ev: Classifier[C]): ev.R = ev.convert(seconds)
def second[C](c: C)(implicit ev: Classifier[C]): ev.R = seconds(c)
def minutes[C](c: C)(implicit ev: Classifier[C]): ev.R = ev.convert(minutes)
def minute[C](c: C)(implicit ev: Classifier[C]): ev.R = minutes(c)
def hours[C](c: C)(implicit ev: Classifier[C]): ev.R = ev.convert(hours)
def hour[C](c: C)(implicit ev: Classifier[C]): ev.R = hours(c)
def days[C](c: C)(implicit ev: Classifier[C]): ev.R = ev.convert(days)
def day[C](c: C)(implicit ev: Classifier[C]): ev.R = days(c)
}
/**
* This object just holds some cogs which make the DSL machine work, not for direct consumption.
*/
object DurationConversions {
trait Classifier[C] {
type R
def convert(d: FiniteDuration): R
}
implicit object spanConvert extends Classifier[span.type] {
type R = FiniteDuration
def convert(d: FiniteDuration) = d
}
implicit object fromNowConvert extends Classifier[fromNow.type] {
type R = Deadline
def convert(d: FiniteDuration) = Deadline.now + d
}
}