Nim capped exponential backoff retry helper
Nim
import std/[random, math, os]
proc withBackoff[T](op: proc(): T {.closure.}; tries = 5;
baseMs = 100.0; capMs = 5_000.0): T =
var lastErr: ref CatchableError
for attempt in 0 ..< tries:
try:
return op()
except CatchableError as e:
lastErr = e
if attempt == tries - 1: break
let base = min(capMs, baseMs * pow(2.0, attempt.float))
sleep(min(capMs, base * (0.5 + rand(1.0))).int) # jittered, capped
raise lastErr
echo withBackoff(proc(): int = 42)