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)