Skip to content

Commit

Permalink
Move Wrap() and WrapContext() to wrap.go for readability
Browse files Browse the repository at this point in the history
  • Loading branch information
jalavosus committed Oct 12, 2021
1 parent 2f0b403 commit 3bec1a4
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 22 deletions.
22 changes: 0 additions & 22 deletions ratelimit.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,28 +33,6 @@ type (
RateLimiterFn func() error
)

// Wrap wraps the passed function within another function, which no parameters
// and calls RateLimit using f(). Helpful for building functions which are "preloaded" with
// a rate limiter, rather than calling RateLimit around every function call.
func Wrap(f func() error, callsPerInterval int64, interval time.Duration) WrappedFn {
r := NewRateLimiter(callsPerInterval, interval)

return func() error {
return r.RateLimit(f)
}
}

// WrapContext wraps the passed function within another function, which takes a single context.Context parameter
// and calls RateLimitContext using f() and that context. Helpful for building functions which are "preloaded" with
// a rate limiter, rather than calling RateLimitContext around every function call.
func WrapContext(f func() error, callsPerInterval int64, interval time.Duration) WrappedFnContext {
r := NewRateLimiter(callsPerInterval, interval)

return func(ctx context.Context) error {
return r.RateLimitContext(ctx, f)
}
}

// RateLimiter is a fancy little struct which can do everything you want it to and more
// in the realm of rate limiting.
type RateLimiter struct {
Expand Down
28 changes: 28 additions & 0 deletions wrap.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ratelimit

import (
"context"
"time"
)

// Wrap wraps the passed function within another function, which no parameters
// and calls RateLimit using fn(). Helpful for building functions which are "preloaded" with
// a rate limiter, rather than calling RateLimit around every function call.
func Wrap(fn RateLimiterFn, callsPerInterval int64, interval time.Duration) WrappedFn {
r := NewRateLimiter(callsPerInterval, interval)

return func() error {
return r.RateLimit(fn)
}
}

// WrapContext wraps the passed function within another function, which takes a single context.Context parameter
// and calls RateLimitContext using fn() and that context. Helpful for building functions which are "preloaded" with
// a rate limiter, rather than calling RateLimitContext around every function call.
func WrapContext(fn RateLimiterFn, callsPerInterval int64, interval time.Duration) WrappedFnContext {
r := NewRateLimiter(callsPerInterval, interval)

return func(ctx context.Context) error {
return r.RateLimitContext(ctx, fn)
}
}

0 comments on commit 3bec1a4

Please sign in to comment.