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 }