summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/shazow/rateio/doc.go
blob: 1c5e0851ce1f2e2126a1b97d016fc897e5dacc5e (plain) (blame)
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
/*
Package rateio provides an io interfaces for rate-limiting.

This can be used to apply rate limiting to any type that implements an io-style interface.

For example, we can use it to restrict the reading rate of a net.Conn:

	type limitedConn struct {
		net.Conn
		io.Reader // Our rate-limited io.Reader for net.Conn
	}

	func (r *limitedConn) Read(p []byte) (n int, err error) {
		return r.Reader.Read(p)
	}

	// ReadLimitConn returns a net.Conn whose io.Reader interface is rate-limited by limiter.
	func ReadLimitConn(conn net.Conn, limiter rateio.Limiter) net.Conn {
		return &limitedConn{
			Conn:   conn,
			Reader: rateio.NewReader(conn, limiter),
		}
	}

Then we can use ReadLimitConn to wrap our existing net.Conn and continue using
the wrapped version in its place.

*/
package rateio