// Copyright IBM Corp. 2020, 2026 // SPDX-License-Identifier: BUSL-1.1 package ratelimit import ( "net/http" "github.com/hashicorp/go-rate" ) // Limiter is used to provide rate limiting. This is the interface implemented // by both rate.Limiter and rate.NopLimiter. type Limiter interface { SetPolicyHeader(string, string, http.Header) error SetUsageHeader(*rate.Quota, http.Header) Allow(string, string, string, string) (bool, *rate.Quota, error) Shutdown() error } // NewLimiter creates a rate.Limiter. func NewLimiter(limits []rate.Limit, maxQuotas int) (*rate.Limiter, error) { return rate.NewLimiter( limits, maxQuotas, rate.WithQuotaStorageUsageMetric(rateLimitQuotaUsage), rate.WithQuotaStorageCapacityMetric(rateLimitQuotaStorageCapacity), ) }