code: func HTTPWrappersForConfig(config *Config, rt http.RoundTripper) (http.RoundTripper, error) {
  	if config.WrapTransport != nil {
  		rt = config.WrapTransport(rt)
  	}
  
  	rt = DebugWrappers(rt)
  
  	// Set authentication wrappers
  	switch {
  	case config.HasBasicAuth() && config.HasTokenAuth():
  		return nil, fmt.Errorf("username/password or bearer token may be set, but not both")
  	case config.HasTokenAuth():
  		rt = NewBearerAuthRoundTripper(config.BearerToken, rt)
  	case config.HasBasicAuth():
  		rt = NewBasicAuthRoundTripper(config.Username, config.Password, rt)
  	}
  	if len(config.UserAgent) > 0 {
  		rt = NewUserAgentRoundTripper(config.UserAgent, rt)
  	}
  	return rt, nil
  }
docs: // HTTPWrappersForConfig wraps a round tripper with any relevant layered
  // behavior from the config. Exposed to allow more clients that need HTTP-like
  // behavior but then must hijack the underlying connection (like WebSocket or
  // HTTP2 clients). Pure HTTP clients should use the RoundTripper returned from
  // New.