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
}