Token-bucket rate limiter (single task; S6 — no `&mut` across `xu`). mut lim := rate.new(100, 100) // 100 events/s, burst 100 if lim.allow {... } For per-peer limits keep one Limiter per peer on the coordinator task.
struct Limiter
XuAPI
pubstruct Limiter {
}
Purpose
Token-bucket rate limiter (single task; S6 — no `&mut` across `xu`). mut lim := rate.new(100, 100) // 100 events/s, burst 100 if lim.allow {... } For per-peer limits keep one Limiter per peer on the coordinator task.
Parameters
none
new
XuAPI
pubfn new(events_per_sec int, burst int) Limiter
Purpose
new(events_per_sec, burst). burst must be >= 1.
Parameters
events_per_secint
events_per_sec (int)
burstint
burst (int)
Returns
Limiter — a value of this type
(&mut Limiter) allow
XuAPI
pubfn (l &mut Limiter) allow() bool
Purpose
allow consumes one token if available.
Parameters
l&mut Limiter
receiver &mut Limiter (exclusive borrow)
Returns
bool — true or false
(&mut Limiter) allow_n
XuAPI
pubfn (l &mut Limiter) allow_n(n int) bool
Purpose
allow_n consumes n tokens or none (all-or-nothing).
Parameters
l&mut Limiter
receiver &mut Limiter (exclusive borrow)
nint
count, length, or limit (int)
Returns
bool — true or false
(Limiter) available
XuAPI
pubfn (l Limiter) available() int
Purpose
Call `available` on `Limiter`.
Parameters
lLimiter
receiver Limiter (value receiver)
Returns
int — a value of this type
(Limiter) sleep_for_hint
XuAPI
pubfn (l Limiter) sleep_for_hint() int
Purpose
sleep_for_hint returns a rough ns until one token exists (0 if ready).