package Ġcom . field kt . k us het ka Ċ Ċ import Ġkotlinx . coroutines . delay Ċ import Ġjava . time . Duration ĊĊ Ċ suspend Ġfun Ġ< T > Ġretry ( retry Policy : ĠIterator < Duration >, Ġblock : Ġsuspend Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġblock () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( retry Policy . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( retry Policy . next (). to Millis ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow Ġt ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠRetry Policy ( iterator : ĠIterator < Duration >) Ġ: ĠIterator < Duration > Ġby Ġiterator Ġ{ ĊĠĠĠ Ġconstructor ( collection : ĠCollection < Duration >) Ġ: Ġthis ( collection . iterator ()) ĊĊĠĠĠ Ġclass ĠMax Retries Constant Delay ( max Retries : ĠInt , Ġdelay : ĠDuration ) Ġ: ĠRetry Policy (( 1 .. max Retries ). map Ġ{ Ġdelay Ġ}) Ċ } Ċ