def retryUntil[A]()

in src/main/scala/com/gu/ssm/utils/attempt/Attempt.scala [178:196]


  def retryUntil[A](delayBetweenRetries: FiniteDuration, attemptA: () => Attempt[A])(condition: A => Boolean)
              (implicit ec: ExecutionContext): Attempt[A] = {
    def loop(a: A, attemptCount: Int): Attempt[A] = {
      if (condition(a)) {
        Attempt.Right(a)
      } else {
        for {
          _ <- delay(delayBetweenRetries)
          nextA <- attemptA()
          result <- loop(nextA, attemptCount + 1)
        } yield result
      }
    }

    for {
      initialA <- attemptA()
      result <- loop(initialA, 1)
    } yield result
  }