Julia token bucket rate limiter struct

Julia
mutable struct TokenBucket
    capacity::Float64
    rate::Float64
    tokens::Float64
    stamp::Float64
end
TokenBucket(capacity, rate) = TokenBucket(capacity, rate, capacity, time())

function take!(b::TokenBucket, n=1.0)
    now = time()
    b.tokens = min(b.capacity, b.tokens + (now - b.stamp) * b.rate)
    b.stamp = now
    b.tokens >= n || return false
    b.tokens -= n
    return true
end

bucket = TokenBucket(3, 1.0)
println([take!(bucket) for _ in 1:5])