Token bucket rate limiter for Nim

Nim
import std/[times, math]

type TokenBucket = object
  cap, rate, tokens, last: float

proc initBucket(cap, rate: float): TokenBucket =
  TokenBucket(cap: cap, rate: rate, tokens: cap, last: epochTime())

proc allow(b: var TokenBucket; now = epochTime()): bool =
  b.tokens = min(b.cap, b.tokens + (now - b.last) * b.rate)
  b.last = now
  if b.tokens >= 1.0:
    b.tokens -= 1.0
    return true
  false

var bucket = initBucket(5.0, 2.0)  # burst 5, refill 2 tokens/s
for _ in 0 ..< 7: echo bucket.allow()