1package main
2
3import (
4	"net"
5	"net/http"
6	"time"
7)
8
9// NewClient creates a new HTTP Client using the ClientConfig values.
10func NewClient(cfg ClientConfig) *http.Client {
11	tr := &http.Transport{
12		Proxy: http.ProxyFromEnvironment,
13		DialContext: (&net.Dialer{
14			Timeout:   cfg.Timeouts.Connect,
15			KeepAlive: 30 * time.Second,
16			DualStack: true,
17		}).DialContext,
18		MaxIdleConns:    100,
19		IdleConnTimeout: cfg.Timeouts.IdleConnection,
20
21		DisableKeepAlives:     !cfg.KeepAlive,
22		TLSHandshakeTimeout:   cfg.Timeouts.TLSHandshake,
23		ExpectContinueTimeout: cfg.Timeouts.ExpectContinue,
24		ResponseHeaderTimeout: cfg.Timeouts.ResponseHeader,
25	}
26
27	return &http.Client{
28		Transport: tr,
29	}
30}
31