mycommon/myhttp/httpc/option.go

72 lines
1.2 KiB
Go

package httpc
import (
"golang.org/x/time/rate"
"net/http"
"time"
)
type (
Config struct {
timeout time.Duration
client *http.Client
transport *http.Transport
redirectFn func(req *http.Request, via []*http.Request) error
noCheckStatus bool
qps int
qpsLimiter *rate.Limiter
}
ConfigOpt func(c *Config)
)
func WithTimout(v time.Duration) ConfigOpt {
return func(c *Config) {
c.timeout = v
}
}
func WithClient(v *http.Client) ConfigOpt {
return func(c *Config) {
c.client = v
}
}
func WithTransport(v *http.Transport) ConfigOpt {
return func(c *Config) {
c.transport = v
}
}
func WithRedirectFn(v func(req *http.Request, via []*http.Request) error) ConfigOpt {
return func(c *Config) {
c.redirectFn = v
}
}
func WithNoRedirect() ConfigOpt {
return func(c *Config) {
c.redirectFn = func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
}
}
}
func WithNoCheckStatus(v bool) ConfigOpt {
return func(c *Config) {
c.noCheckStatus = v
}
}
func WithQps(v int) ConfigOpt {
return func(c *Config) {
c.qps = v
}
}
func WithQpsLimiter(v *rate.Limiter) ConfigOpt {
return func(c *Config) {
c.qpsLimiter = v
}
}