github.com/goravel/framework@v1.13.9/http/rate_limiter.go (about)

     1  package http
     2  
     3  import (
     4  	"github.com/goravel/framework/contracts/http"
     5  )
     6  
     7  type RateLimiter struct {
     8  	limiters map[string]func(ctx http.Context) []http.Limit
     9  }
    10  
    11  func NewRateLimiter() *RateLimiter {
    12  	return &RateLimiter{
    13  		limiters: make(map[string]func(ctx http.Context) []http.Limit),
    14  	}
    15  }
    16  
    17  func (r *RateLimiter) For(name string, callback func(ctx http.Context) http.Limit) {
    18  	r.limiters[name] = func(ctx http.Context) []http.Limit {
    19  		return []http.Limit{callback(ctx)}
    20  	}
    21  }
    22  
    23  func (r *RateLimiter) ForWithLimits(name string, callback func(ctx http.Context) []http.Limit) {
    24  	r.limiters[name] = callback
    25  }
    26  
    27  func (r *RateLimiter) Limiter(name string) func(ctx http.Context) []http.Limit {
    28  	return r.limiters[name]
    29  }