code: func (c *Config) TransportConfig() (*transport.Config, error) {
  	conf := &transport.Config{
  		UserAgent:     c.UserAgent,
  		Transport:     c.Transport,
  		WrapTransport: c.WrapTransport,
  		TLS: transport.TLSConfig{
  			Insecure:   c.Insecure,
  			ServerName: c.ServerName,
  			CAFile:     c.CAFile,
  			CAData:     c.CAData,
  			CertFile:   c.CertFile,
  			CertData:   c.CertData,
  			KeyFile:    c.KeyFile,
  			KeyData:    c.KeyData,
  		},
  		Username:    c.Username,
  		Password:    c.Password,
  		BearerToken: c.BearerToken,
  		Impersonate: transport.ImpersonationConfig{
  			UserName: c.Impersonate.UserName,
  			Groups:   c.Impersonate.Groups,
  			Extra:    c.Impersonate.Extra,
  		},
  		Dial: c.Dial,
  	}
  
  	if c.ExecProvider != nil && c.AuthProvider != nil {
  		return nil, errors.New("execProvider and authProvider cannot be used in combination")
  	}
  
  	if c.ExecProvider != nil {
  		provider, err := exec.GetAuthenticator(c.ExecProvider)
  		if err != nil {
  			return nil, err
  		}
  		if err := provider.UpdateTransportConfig(conf); err != nil {
  			return nil, err
  		}
  	}
  	if c.AuthProvider != nil {
  		provider, err := GetAuthProvider(c.Host, c.AuthProvider, c.AuthConfigPersister)
  		if err != nil {
  			return nil, err
  		}
  		conf.Wrap(provider.WrapTransport)
  	}
  	return conf, nil
  }
docs: // TransportConfig converts a client config to an appropriate transport config.