From 0c996ccaf91f1486d5dfadccd53d63846a7aea8e Mon Sep 17 00:00:00 2001 From: zenghongru Date: Mon, 7 Dec 2020 16:07:09 +0800 Subject: [PATCH] fix: divided by zero --- .../sliding_window_rate_limiter.go | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/redispattern/slidingwindowratelimiter/sliding_window_rate_limiter.go b/redispattern/slidingwindowratelimiter/sliding_window_rate_limiter.go index 762dbcb..0fe50a6 100644 --- a/redispattern/slidingwindowratelimiter/sliding_window_rate_limiter.go +++ b/redispattern/slidingwindowratelimiter/sliding_window_rate_limiter.go @@ -47,13 +47,24 @@ type SlidingWindowRateLimiter struct { limit int64 } +// Option is necessary for creating a limiter. +type Option struct { + Redis rediser + Key string + Window time.Duration + Limit int64 +} + // New generates a rate limiter. -func New(redis rediser, key string, window time.Duration, limit int64) (*SlidingWindowRateLimiter, error) { +func New(o *Option) (*SlidingWindowRateLimiter, error) { + if o.Window.Seconds() < 1 { + return nil, errors.New("below one second is not supported") + } sl := &SlidingWindowRateLimiter{ - redis: redis, - key: key, - window: window, - limit: limit, + redis: o.Redis, + key: o.Key, + window: o.Window, + limit: o.Limit, } return sl, nil }