---
name: RateLimitResult
lang: go
domain: infra
version: "1.0.0"
algebraic: product
definition: |
  type RateLimitResult struct {
      Allowed    bool
      Remaining  int
      ResetAt    time.Time
      RetryAfter float64
  }
description: "Resultado de evaluar un request contra un RateLimiter. Indica si pasa, cuantos tokens quedan, cuando se rellena el bucket y cuanto esperar antes de reintentar."
tags: [rate_limit, result, http, middleware, infra]
uses_types: []
file_path: "functions/infra/rate_limiter.go"
---

## Ejemplo

```go
result := RateLimiterCheck(rl, "192.168.1.1")
if result.Allowed {
    // procesar request
} else {
    w.Header().Set("Retry-After", strconv.FormatFloat(result.RetryAfter, 'f', 1, 64))
}
```

## Notas

Snapshot inmutable del estado del bucket en el momento del check. `Remaining` es el numero entero de tokens disponibles tras el check. `ResetAt` es absoluto (UTC). `RetryAfter` es 0 cuando el request es permitido. Se serializa indirectamente a headers HTTP via `RateLimitHeaders`.
