summaryrefslogtreecommitdiffstats
path: root/vendor/gopkg.in/throttled/throttled.v2/deprecated.go
blob: f2c648a3e3a7026e87ee04af0f9da38a63a19d98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package throttled

import (
	"net/http"
	"time"
)

// DEPRECATED. Quota returns the number of requests allowed and the custom time window.
func (q Rate) Quota() (int, time.Duration) {
	return q.count, q.period * time.Duration(q.count)
}

// DEPRECATED. Q represents a custom quota.
type Q struct {
	Requests int
	Window   time.Duration
}

// DEPRECATED. Quota returns the number of requests allowed and the custom time window.
func (q Q) Quota() (int, time.Duration) {
	return q.Requests, q.Window
}

// DEPRECATED. The Quota interface defines the method to implement to describe
// a time-window quota, as required by the RateLimit throttler.
type Quota interface {
	// Quota returns a number of requests allowed, and a duration.
	Quota() (int, time.Duration)
}

// DEPRECATED. Throttler is a backwards-compatible alias for HTTPLimiter.
type Throttler struct {
	HTTPRateLimiter
}

// DEPRECATED. Throttle is an alias for HTTPLimiter#Limit
func (t *Throttler) Throttle(h http.Handler) http.Handler {
	return t.RateLimit(h)
}

// DEPRECATED. RateLimit creates a Throttler that conforms to the given
// rate limits
func RateLimit(q Quota, vary *VaryBy, store GCRAStore) *Throttler {
	count, period := q.Quota()

	if count < 1 {
		count = 1
	}
	if period <= 0 {
		period = time.Second
	}

	rate := Rate{period: period / time.Duration(count)}
	limiter, err := NewGCRARateLimiter(store, RateQuota{rate, count - 1})

	// This panic in unavoidable because the original interface does
	// not support returning an error.
	if err != nil {
		panic(err)
	}

	return &Throttler{
		HTTPRateLimiter{
			RateLimiter: limiter,
			VaryBy:      vary,
		},
	}
}

// DEPRECATED. Store is an alias for GCRAStore
type Store interface {
	GCRAStore
}