CycloneTechnology/ChaMP

View on GitHub
champ-core/src/main/scala/com/cyclone/command/TimeoutContext.scala

Summary

Maintainability
A
0 mins
Test Coverage
package com.cyclone.command

import scala.concurrent.duration._

/**
  * Timeout information for an operation.
  *
  * @param deadline        the absolute deadline for the operation for which the request forms part
  * @param requestTimeouts the timeouts that can be used for retry-able internal requests
  *                        (where supported by the protocol)
  */
case class TimeoutContext(
  deadline: OperationDeadline,
  requestTimeouts: RequestTimeouts = RequestTimeouts.default
) {
  def deadlineReached: Boolean = deadline.currentState().deadlineReached

  def withTimeouts(requestTimeouts: RequestTimeouts): TimeoutContext =
    copy(requestTimeouts = requestTimeouts)
}

object TimeoutContext {

  def fromDeadline(deadline: FiniteDuration): TimeoutContext =
    TimeoutContext(deadline = OperationDeadline.fromNow(deadline))

  val default: TimeoutContext = TimeoutContext(
    deadline = OperationDeadline.reusableTimeout(5.minutes)
  )
}