/* 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