func NewProvider(opts ...ProviderOptions) *Provider {
	var providerOpts ProviderOptions
	switch len(opts) {
	case 0:
		providerOpts = ProviderOptions{
			Timeout: &DefaultTimeoutOptions,
		}
	case 1:
		providerOpts = opts[0]
	default:
		panic("only an empty or one ProviderOptions is valid as argument")
	}
	if providerOpts.Middlewares == nil {
		providerOpts.Middlewares = DefaultMiddlewares()
	}
	return &Provider{
		Opts: providerOpts,
	}
}
NewProvider creates a new HTTP client provider.
Optionally provide ProviderOptions which will be used as a fallback if no Options
are provided to Provider.New, Provider.GetTransport or Provider.GetTLSConfig.
If no middlewares are provided in opts the DefaultMiddlewares() will be used. If you
provide middlewares you have to manually add the DefaultMiddlewares() for it to be
enabled.
Note: Middlewares will be executed in the same order as provided.
Note: If more than one ProviderOption is provided a panic is raised.
package httpclient
import (
	"crypto/tls"
	"net/http"
)
type ProviderOptions struct {
	Timeout *TimeoutOptions
	TLS *TLSOptions
	Middlewares []Middleware
	ConfigureMiddleware ConfigureMiddlewareFunc
	ConfigureClient ConfigureClientFunc
	ConfigureTransport ConfigureTransportFunc
	ConfigureTLSConfig ConfigureTLSConfigFunc
}
type Provider struct {
	Opts ProviderOptions
}